hdu6098

xiaoxiao2021-02-28  85

Inversion

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 271    Accepted Submission(s): 183 Problem Description Give an array A, the index starts from 1. Now we want to know  Bi=maxijAj  ,  i2 .   Input The first line of the input gives the number of test cases T; T test cases follow. Each case begins with one line with one integer n : the size of array A. Next one line contains n integers, separated by space, ith number is  Ai . Limits T20 2n100000 1Ai1000000000 n700000   Output For each test case output one line contains n-1 integers, separated by space, ith number is  Bi+1 .   Sample Input 2 4 1 2 3 4 4 1 4 2 3   Sample Output 3 4 3 2 4 4   Source 2017 Multi-University Training Contest - Team 6 —————————————————————————————————— 题目的意思是给出一个序列,求2~n每一个数,下标不是这个数倍数的最大值是什么? 思路:从大到小排个序,然后枚举判下表是否为这个数的倍数 [cpp] view plain copy print ? #include <iostream>  #include <cstdio>  #include <cstring>  #include <map>  #include <set>  #include <string>  #include <cmath>  #include <algorithm>  #include <vector>  #include <bitset>  #include <stack>  #include <queue>  #include <unordered_map>  #include <functional>    using namespace std;    struct node{  int id,v;  }a[100005];    bool cmp(node x,node y)  {      return x.v>y.v;  }    int main()  {      int T,n;      for(scanf("%d",&T);T--;)      {          scanf("%d",&n);          for(int i=1;i<=n;i++)              scanf("%d",&a[i].v),a[i].id=i;          sort(a+1,a+1+n,cmp);          int q=0;          for(int i=2;i<=n;i++)          {              int k=1;              while(a[k].id%i==0)              {                 k++;              }              if(q++)                  printf(" ");              printf("%d",a[k].v);          }          printf("\n");        }      return 0;  }   #include <iostream> #include <cstdio> #include <cstring> #include <map> #include <set> #include <string> #include <cmath> #include <algorithm> #include <vector> #include <bitset> #include <stack> #include <queue> #include <unordered_map> #include <functional> using namespace std; struct node{ int id,v; }a[100005]; bool cmp(node x,node y) { return x.v>y.v; } int main() { int T,n; for(scanf("%d",&T);T--;) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i].v),a[i].id=i; sort(a+1,a+1+n,cmp); int q=0; for(int i=2;i<=n;i++) { int k=1; while(a[k].id%i==0) { k++; } if(q++) printf(" "); printf("%d",a[k].v); } printf("\n"); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-56091.html

最新回复(0)