Submission #13703

#TimeUsernameProblemLanguageResultExecution timeMemory
13703gs13068Wall (IOI14_wall)C++98
100 / 100
936 ms51444 KiB
#include<algorithm> struct tree { int min; int max; } t[4444444]; void upd(int i,int s,int e,int l,int r,int op,int height) { if(l<s)l=s; if(r>e)r=e; if(l>r)return; if(l==s&&r==e) { if(op==1) { t[i].min = std::max(t[i].min,height); t[i].max = std::max(t[i].max,height); } if(op==2) { t[i].min = std::min(t[i].min,height); t[i].max = std::min(t[i].max,height); } return; } t[i*2].max=std::max(t[i*2].max,t[i].min); t[i*2].max=std::min(t[i*2].max,t[i].max); t[i*2].min=std::max(t[i*2].min,t[i].min); t[i*2].min=std::min(t[i*2].min,t[i].max); t[i*2+1].max=std::max(t[i*2+1].max,t[i].min); t[i*2+1].max=std::min(t[i*2+1].max,t[i].max); t[i*2+1].min=std::max(t[i*2+1].min,t[i].min); t[i*2+1].min=std::min(t[i*2+1].min,t[i].max); t[i].min=0; t[i].max=100000; upd(i*2,s,(s+e)/2,l,r,op,height); upd(i*2+1,(s+e)/2+1,e,l,r,op,height); } void get(int i,int s,int e,int finalHeight[]) { if(s==e) { finalHeight[s]=t[i].min; return; } t[i*2].max=std::max(t[i*2].max,t[i].min); t[i*2].max=std::min(t[i*2].max,t[i].max); t[i*2].min=std::max(t[i*2].min,t[i].min); t[i*2].min=std::min(t[i*2].min,t[i].max); t[i*2+1].max=std::max(t[i*2+1].max,t[i].min); t[i*2+1].max=std::min(t[i*2+1].max,t[i].max); t[i*2+1].min=std::max(t[i*2+1].min,t[i].min); t[i*2+1].min=std::min(t[i*2+1].min,t[i].max); get(i*2,s,(s+e)/2,finalHeight); get(i*2+1,(s+e)/2+1,e,finalHeight); } void buildWall(int n,int k,int op[],int left[],int right[],int height[],int finalHeight[]) { int i; for(i=0;i<k;i++)upd(1,0,n-1,left[i],right[i],op[i],height[i]); get(1,0,n-1,finalHeight); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...