Submission #1275401

#TimeUsernameProblemLanguageResultExecution timeMemory
1275401uzukishinobuWall (IOI14_wall)C++20
100 / 100
430 ms66976 KiB
#include "wall.h" #include <bits/stdc++.h> using namespace std; int f[8000005]; int f1[8000005]; int res[2000005]; void push(int id){ if (f[id]!=f1[id]){ return; } f[id*2]=f1[id*2]=f[id]; f[id*2+1]=f1[id*2+1]=f[id]; } void update(int id,int l,int r,int x,int y,int val){ if (val<=f[id] || x>r || y<l){ return; } if (l>=x && y>=r && val>f1[id]){ f[id]=f1[id]=val; return; } int mid=(l+r)/2; push(id); update(id*2,l,mid,x,y,val); update(id*2+1,mid+1,r,x,y,val); f[id]=min(f[id*2],f[id*2+1]); f1[id]=max(f1[id*2],f1[id*2+1]); } void update1(int id,int l,int r,int x,int y,int val){ if (val>=f1[id] || x>r || y<l){ return; } if (l>=x && y>=r && val<f[id]){ f[id]=f1[id]=val; return; } int mid=(l+r)/2; push(id); update1(id*2,l,mid,x,y,val); update1(id*2+1,mid+1,r,x,y,val); f[id]=min(f[id*2],f[id*2+1]); f1[id]=max(f1[id*2],f1[id*2+1]); } void bruh(int id,int l,int r){ if (l==r){ res[l]=f[id]; // cerr << res[l] << " "; return; } int mid=(l+r)/2; push(id); bruh(id*2,l,mid); bruh(id*2+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]); }else{ update1(1,0,n-1,left[i],right[i],height[i]); } // cerr << "\n"; } bruh(1,0,n-1); for (int i=0;i<n;i++){ finalHeight[i]=res[i]; } return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...