Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<queue>
  4. #include<algorithm>
  5. #include<vector>
  6. #define FOR(x,y,z) for(int x=y;x<z;(x)++)
  7. #define FORD(x,y,z) for(int x=y;x>=z;(x)--)
  8. #define PB push_back
  9. #define F first
  10. #define S second
  11. #define MP make_pair
  12. using namespace std;
  13.  
  14.  
  15.  
  16. int N,T[500010],WL[500010],WR[500010];
  17. vector<pair<int,int> > Q[500010];
  18.  
  19.  
  20. int main()
  21. {
  22.    scanf("%d",&N);
  23.    FOR(i,0,N)scanf("%d",&T[i]);
  24.    int curr=0,last=0;;
  25.    FOR(i,0,N)
  26.    {
  27.       if(curr<=T[i])curr=T[i];
  28.       if(T[i]>last && i<=N-2){Q[i+1].PB(MP(0,i));last=T[i];}
  29.       FOR(j,0,Q[i].size())
  30.       {
  31.          int a=Q[i][j].F,b=Q[i][j].S;
  32.          if(curr<T[b]+a+1)curr=T[b]+a+1;
  33.          if(b+(a+1)*(a+1)+1<=N-1)Q[b+(a+1)*(a+1)+1].PB(MP(a+1,b));
  34.       }
  35.       Q[i].clear();
  36.       WL[i]=curr;
  37.    }
  38.    curr=0,last=0;
  39.    FORD(i,N-1,0)
  40.    {
  41.       if(curr<=T[i])curr=T[i];
  42.       if(T[i]>last && i>=1){Q[i-1].PB(MP(0,i));last=T[i];}
  43.       FOR(j,0,Q[i].size())
  44.       {
  45.          int a=Q[i][j].F,b=Q[i][j].S;
  46.          if(curr<T[b]+a+1)curr=T[b]+a+1;
  47.          if(b-(a+1)*(a+1)-1>=0)Q[b-(a+1)*(a+1)-1].PB(MP(a+1,b));
  48.       }
  49.       Q[i].clear();
  50.       WR[i]=curr;
  51.    }
  52. //   FOR(i,0,N)printf("%d ",WL[i]);
  53.    FOR(i,0,N)printf("%d\n",max(WR[i],WL[i])-T[i]);
  54. //   system("pause");
  55.    return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement