제출 #1127222

#제출 시각아이디문제언어결과실행 시간메모리
1127222Math4Life2020벽 (IOI14_wall)C++20
컴파일 에러
0 ms0 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]); } ll ht = l2(p); assert(ht>=ht0); if (ht!=ht0) { return; } p=p/2; while (p>0) { st[p]=fz(st[2*p],st[2*p+1]); p=p/2; } } 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((l>>e)+(1<<(E-e))); pdn((r>>e)+(1<<(E-e))); } } for (ll i=0;i<N;i++) { finalHeight[i]=st[Nm+i].first; } }

컴파일 시 표준 에러 (stderr) 메시지

In file included from /usr/include/c++/11/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:33,
                 from wall.cpp:1:
wall.cpp: In function 'void chmax(ll, ll)':
wall.cpp:75:20: error: 'ht0' was not declared in this scope; did you mean 'ht'?
   75 |         assert(ht>=ht0);
      |                    ^~~
wall.cpp: In function 'void buildWall(int, int, int*, int*, int*, int*, int*)':
wall.cpp:113:30: error: 'l' was not declared in this scope
  113 |                         pdn((l>>e)+(1<<(E-e)));
      |                              ^
wall.cpp:114:30: error: 'r' was not declared in this scope
  114 |                         pdn((r>>e)+(1<<(E-e)));
      |                              ^