1 solutions
-
0
C++ :
#include<cstdio> #define kl k<<1 #define kr k<<1|1 const int N=200001; int d=0; int v[N],t[N<<2]; int min(int a,int b){if(a<b)return a;return b;} void build(int L,int R,int k) { if(L==R) scanf("%d",&v[d]),t[k]=v[d++]; else { int mid=(L+R)>>1; build(L,mid,kl); build(mid+1,R,kr); t[k]=min(t[kl],t[kr]); } } int query(int L,int R,int x,int k) { if(t[k]>=v[x]) return 0; if(L==R&&t[k]<v[x]) return v[L-1]; int y,mid=(L+R)>>1; if(x>mid) { y=query(mid+1,R,x,kr); if(y==0) y=query(L,mid,x,kl); } else y=query(L,mid,x,kl); return y; } int main() { int i,n; scanf("%d",&n); build(1,n,1); printf("0"); for(i=1;i<n;i++) printf(" %d",query(1,n,i,1)); return 0; }
- 1
Information
- ID
- 10156
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By