Submission #13243

#TimeUsernameProblemLanguageResultExecution timeMemory
13243dohyun0324Weighting stones (IZhO11_stones)C++98
100 / 100
76 ms12800 KiB
#include<stdio.h> static int n,x1,y1,t=1,p; struct data { int maxi,mini,ch; }Tree[1000010]; int maxx(int x,int y) { if(x>y) return x; return y; } int minn(int x,int y) { if(x<y) return x; return y; } void update(int x,int y,int k,int s,int e) { if(Tree[k].ch!=0) { Tree[k].maxi+=Tree[k].ch; Tree[k].mini+=Tree[k].ch; Tree[k*2].ch+=Tree[k].ch; Tree[k*2+1].ch+=Tree[k].ch; Tree[k].ch=0; } if(s<=x && y<=e) { Tree[k].maxi+=p; Tree[k].mini+=p; Tree[k*2].ch+=p; Tree[k*2+1].ch+=p; return; } if(s>y || e<x) return; update(x,(x+y)/2,k*2,s,e); update((x+y)/2+1,y,k*2+1,s,e); Tree[k].maxi=maxx(Tree[k*2].maxi,Tree[k*2+1].maxi); Tree[k].mini=minn(Tree[k*2].mini,Tree[k*2+1].mini); } int main() { int i; scanf("%d",&n); for(;;){if(t>=n) break; t*=2;} for(i=1;i<=n;i++) { scanf("%d %d",&x1,&y1); if(y1==1) p=1; else p=-1; update(1,t,1,1,x1); if(Tree[1].maxi<=0) printf("<\n"); else if(Tree[1].mini>=0) printf(">\n"); else printf("?\n"); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...