Submission #1127224

#TimeUsernameProblemLanguageResultExecution timeMemory
1127224Math4Life2020Wall (IOI14_wall)C++20
32 / 100
3094 ms11488 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx2,sse4,bmi,bmi2,fma") using ll = int; using pii = pair<ll,ll>; const ll Nm = 131072; const ll E = 17; vector<pii> st; //{min,max} ll v2(ll x) { return (__builtin_ctz(x)); } ll l2(ll x) { return (31-__builtin_clz(x)); } pii fz(pii p1, pii p2) { return {min(p1.first,p2.first),max(p1.second,p2.second)}; } void pdn(ll p) { if (p>=Nm) { return; } st[p]=fz(st[2*p],st[2*p+1]); } void chmin(ll p, ll nf) { //cout << "chmin at p,nf="<<p<<","<<nf<<"\n"; if (st[p].first>=nf) { //cout << "breaking\n"; return; } if (p>=Nm) { //cout << "setting\n"; st[p]={nf,nf}; } else { chmin(2*p,nf); chmin(2*p+1,nf); st[p]=fz(st[2*p],st[2*p+1]); } } void chminI(ll l, ll r, ll nf) { if (l>r) { return; } ll vl = v2(l); ll vr = v2(r+1); if (vl<vr) { chmin((l>>vl)+(1<<(E-vl)),nf); chminI(l+(1<<vl),r,nf); } else { chmin((r>>vr)+(1<<(E-vr)),nf); chminI(l,r-(1<<vr),nf); } } void chmax(ll p, ll nf) { //cout << "chmax at p="<<p<<", nf="<<nf<<"\n"; if (st[p].second<=nf) { //cout << "breaking\n"; return; } if (p>=Nm) { //cout << "setting\n"; st[p]={nf,nf}; } else { chmax(2*p,nf); chmax(2*p+1,nf); st[p]=fz(st[2*p],st[2*p+1]); } } void chmaxI(ll l, ll r, ll nf) { //cout << "chmaxI: "<<l<<","<<r<<","<<nf<<"\n"; if (l>r) { return; } ll vl = v2(l); ll vr = v2(r+1); if (vl<vr) { chmax((l>>vl)+(1<<(E-vl)),nf); chmaxI(l+(1<<vl),r,nf); } else { chmax((r>>vr)+(1<<(E-vr)),nf); chmaxI(l,r-(1<<vr),nf); } } void buildWall(int N, int K, int op[], int left[], int right[], int height[], int finalHeight[]) { st.clear(); for (ll i=0;i<(2*Nm);i++) { st.push_back({0,0}); } for (ll k=0;k<K;k++) { if (op[k]==1) { chminI(left[k],right[k],height[k]); } else { chmaxI(left[k],right[k],height[k]); } for (ll e=1;e<=E;e++) { pdn((left[k]>>e)+(1<<(E-e))); pdn((right[k]>>e)+(1<<(E-e))); } } for (ll i=0;i<N;i++) { finalHeight[i]=st[Nm+i].first; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...