Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cmath>
  5. #define FOR(x,y,z) for(int x=y;x<z;x++)
  6. using namespace std;
  7.  
  8. struct przedz
  9. {
  10.    int val,s,e;
  11.    przedz(int a, int b, int c){val=a;s=b;e=c;}
  12.    przedz(){}
  13. };
  14. przedz T[1100000];
  15. int N,last;
  16.  
  17. void update(int pos, int v)
  18. {
  19.    T[pos]=przedz(v,pos-last,pos-last);
  20.    pos/=2;
  21.    while(pos)
  22.    {
  23.       T[pos]=przedz(max(T[pos*2].val,T[pos*2+1].val),T[pos*2].s,max(T[pos*2+1].e,T[pos*2].e));
  24.       pos/=2;
  25.    }
  26. }
  27.  
  28. int takemax(int x, int p, int q)
  29. {
  30.  //  printf("takemax: %d %d %d\n",x,p,q);
  31.  //  system("pause");
  32.    if(p>q)return 0;
  33.    p=max(p,T[x].s);
  34.    q=min(q,T[x].e);
  35.    if(p==T[x].s && q==T[x].e)return T[x].val;
  36.    return max(takemax(x*2,p,T[x*2].e),takemax(x*2+1,T[x*2].e+1,q));
  37. }
  38.  
  39. int main()
  40. {
  41.   scanf("%d",&N);
  42.   last=int(pow(2,ceil(log2(N))));
  43.   int a;
  44.   FOR(i,0,N){scanf("%d",&a);update(last+i,a);}
  45.  // FOR(i,1,2*last){if(int(pow(2,ceil(log2(i))))==i)printf("\n");printf("%d %d %d|",T[i].s,T[i].val,T[i].e);}
  46.  /* while(true)
  47.   {
  48.       int y,u;
  49.       scanf("%d %d",&y,&u);
  50.       printf("%d\n",takemax(1,y-1,u-1));
  51.   }*/
  52.   printf("\n");
  53.   FOR(i,0,N)
  54.   {
  55.       int req=T[i+last].val;
  56.       for(int r=0;r*r<i;r++)req=max(req,r+1+takemax(1,max(0,i-(r+1)*(r+1)),i-(r*r)-1));
  57.       for(int r=0;r*r<N-1-i;r++)req=max(req,r+1+takemax(1,i+r*r+1,min(N-1,i+(r+1)*(r+1))));
  58.       printf("%d\n",req-T[i+last].val);
  59.   }
  60. //  system("pause");
  61.   return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement