제출 #329050

#제출 시각아이디문제언어결과실행 시간메모리
329050super_j6벽 (IOI14_wall)C++14
100 / 100
964 ms224872 KiB
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; #define endl '\n' #define ll long long #define pi pair<int, int> #define f first #define s second const int inf = 0x3f3f3f3f; struct segTree{ int l, r; segTree *tl, *tr; int mn = 0, mx = inf; segTree(int a, int b){ l = a, r = b; mn = 0, mx = inf; if(l != r){ int mid = (l + r) / 2; tl = new segTree(l, mid); tr = new segTree(mid + 1, r); } } void upd(int vl, int vr){ mn = min(max(mn, vl), vr); mx = min(max(mx, vl), vr); } void psh(){ tl->upd(mn, mx), tr->upd(mn, mx); mn = 0, mx = inf; } void add(int a, int b, int vl, int vr){ if(b < l || r < a) return; if(a <= l && r <= b) return upd(vl, vr); psh(); tl->add(a, b, vl, vr), tr->add(a, b, vl, vr); } void sol(int ans[]){ if(l == r) return (void)(ans[l] = mn); psh(); tl->sol(ans), tr->sol(ans); } }; void buildWall(int n, int q, int t[], int l[], int r[], int h[], int ans[]){ segTree tre(0, n - 1); for(int i = 0; i < q; i++){ if(t[i] & 1) tre.add(l[i], r[i], h[i], inf); else tre.add(l[i], r[i], 0, h[i]); } tre.sol(ans); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...