Submission #620891

#TimeUsernameProblemLanguageResultExecution timeMemory
620891balbitWall (IOI14_wall)C++14
100 / 100
756 ms124424 KiB
#include "wall.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<ll, ll> #define f first #define s second #define FOR(i,a,b) for (int i = a; i<b; ++i) #define REP(i,n) FOR(i,0,n) #define REP1(i,n) FOR(i,1,n+1) #define MX(a,b) a = max(a,b) #define MN(a,b) a = min(a,b) #define SZ(x) (int)(x).size() #define ALL(x) (x).begin(), (x).end() #define pb push_back #ifdef BALBIT #define bug(...) cerr<<"#"<<__LINE__<<": "<<#__VA_ARGS__<<"- ", _do(__VA_ARGS__) template<typename T> void _do(T && x) {cerr<<x<<endl;} template<typename T, typename ...S> void _do(T && x, S && ...y) {cerr<<x<<", "; _do(y...);} #else #define bug(...) #define endl '\n' #endif const ll inf = 0x3f3f3f3f3f3f3f3f; const int iinf = 0x3f3f3f3f; const int maxn = 5e5+5; struct rng{ int l,r; inline int eval(int x) { return x<l?l:(x>r?r:x); } rng(){ l=0,r=100000; } rng(int a, int b):l(a),r(b){} }; inline rng mrg(rng a, rng b) { return {b.eval(a.l), b.eval(a.r)}; } rng seg[maxn*4]; void MO(int p, rng to, int o=1, int l=0, int r=maxn-1) { if (l > p || r < p) return; if (l==r) { seg[o] = to; return; } int mid = (l+r)/2; MO(p,to,o*2,l,mid); MO(p,to,o*2+1,mid+1,r); seg[o] = mrg(seg[o*2], seg[o*2+1]); } vector<pair<int, rng> > work[maxn*4]; //what to do at these positions void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ REP(i,k) { rng bro = op[i]==1?rng{height[i],100000} : rng{0,height[i]}; work[left[i]].pb({i, bro}); work[right[i]+1].pb({i, rng()}); } REP(i,n) { for (auto &e : work[i]) { MO(e.f, e.s); } bug(i, seg[1].l, seg[1].r); finalHeight[i] = seg[1].l; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...