Submission #1275606

#TimeUsernameProblemLanguageResultExecution timeMemory
1275606danglayloi1Wall (IOI14_wall)C++20
100 / 100
451 ms67020 KiB
#include "wall.h" #include <bits/stdc++.h> #define ii pair<int, int> #define fi first #define se second #define inf 0x3f3f3f3f using namespace std; using ll = long long; const ll mod=1e9+7; const int nx=2e6+5; int res[nx], lmax[nx<<2], lmin[nx<<2]; void down(int id) { if(lmax[id]!=lmin[id]) return; lmin[id<<1]=lmax[id<<1]=lmin[id]; lmin[id<<1|1]=lmax[id<<1|1]=lmin[id]; } void update(int id, int l, int r, int u, int v, int val) { if(val<=lmin[id] || l>v || r<u) return; if(l>=u && r<=v && val>lmax[id]) { lmin[id]=lmax[id]=val; return; } int mid=(l+r)>>1; down(id); update(id<<1, l, mid, u, v, val); update(id<<1|1, mid+1, r, u, v, val); lmin[id]=min(lmin[id<<1], lmin[id<<1|1]); lmax[id]=max(lmax[id<<1], lmax[id<<1|1]); } void update1(int id, int l, int r, int u, int v, int val) { if(val>=lmax[id] || l>v || r<u) return; if(l>=u && r<=v && val<lmin[id]) { lmin[id]=lmax[id]=val; return; } int mid=(l+r)>>1; down(id); update1(id<<1, l, mid, u, v, val); update1(id<<1|1, mid+1, r, u, v, val); lmin[id]=min(lmin[id<<1], lmin[id<<1|1]); lmax[id]=max(lmax[id<<1], lmax[id<<1|1]); } void push(int id, int l, int r) { if(l==r) { res[l]=lmin[id]; return; } int mid=(l+r)/2; down(id); push(id<<1, l, mid); push(id<<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++) { left[i]++, right[i]++; if(op[i]==1) update(1, 1, n, left[i], right[i], height[i]); else update1(1, 1, n, left[i], right[i], height[i]); } push(1, 1, n); for(int i = 1; i <= n; i++) finalHeight[i-1]=res[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...