Submission #307480

#TimeUsernameProblemLanguageResultExecution timeMemory
307480juggernaut벽 (IOI14_wall)C++14
100 / 100
801 ms67064 KiB
#include"wall.h" #include<bits/stdc++.h> using namespace std; int flag[8000000][2]; int ans[2000000]; void app(int v,int mn,int mx){ flag[v][0]=min(max(flag[v][0],mn),mx); flag[v][1]=min(max(flag[v][1],mn),mx); } void push(int v,int l,int r){ if(l!=r){ app(v<<1,flag[v][0],flag[v][1]); app((v<<1)+1,flag[v][0],flag[v][1]); } flag[v][0]=0; flag[v][1]=2e9; } void update(int v,int l,int r,int ql,int qr,int mn,int mx){ if(ql<=l&&r<=qr){ app(v,mn,mx); return; } if(r<ql||qr<l)return; push(v,l,r); int mid=(l+r)>>1; update(v<<1,l,mid,ql,qr,mn,mx); update((v<<1)+1,mid+1,r,ql,qr,mn,mx); } void build(int v,int l,int r){ if(l==r){ ans[l]=flag[v][1]; return; } push(v,l,r); int mid=(l+r)>>1; build(v<<1,l,mid); build((v<<1)+1,mid+1,r); } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ for(int i=0;i<k;i++){ if(op[i]==1)update(1,0,n-1,left[i],right[i],height[i],2e9); else update(1,0,n-1,left[i],right[i],0,height[i]); } build(1,0,n-1); for(int i=0;i<n;i++)finalHeight[i]=ans[i]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...