제출 #402962

#제출 시각아이디문제언어결과실행 시간메모리
402962danielcm585벽 (IOI14_wall)C++14
0 / 100
187 ms13836 KiB
#include "wall.h" #include <bits/stdc++.h> using namespace std; const int INF = 1e9; struct node { node *lf, *rg; int l, r; int val, lzMin, lzMax; node(int x, int y): l(x), r(y), val(0), lzMin(INF), lzMax(-INF) {} void build() { if (l == r) return; int mid = (l+r)/2; lf = new node(l,mid); lf->build(); rg = new node(mid+1,r); rg->build(); } void apply(int mn, int mx) { val = min(val,mn); lzMin = min(lzMin,mn); val = max(val,mx); lzMax = max(lzMax,mx); } void prop() { if (lzMin == INF && lzMax == -INF) return; if (l < r) { lf->apply(lzMin,lzMax); rg->apply(lzMin,lzMax); } lzMin = INF, lzMax = -INF; } void update(int x, int y, int mn, int mx) { if (l > y || r < x) return; if (l >= x && r <= y) { apply(mn,mx); return; } prop(); lf->update(x,y,mn,mx); rg->update(x,y,mn,mx); } int query(int x) { if (l == r) return val; prop(); int mid = (l+r)/2; if (x <= mid) return lf->query(x); return rg->query(x); } }; void buildWall(int n, int k, int op[], int l[], int r[], int h[], int ans[]) { node *st = new node(0,n-1); st->build(); for (int i = 0; i < k; i++) { if (op[i] == 1) st->update(l[i],r[i],INF,h[i]); else st->update(l[i],r[i],h[i],-INF); // for (int j = 0; j < n; j++) cout << st->query(j) << ' '; // cout << '\n'; } for (int i = 0; i < n; i++) ans[i] = st->query(i); } /* 10 6 1 1 8 4 0 4 9 1 0 3 6 5 1 0 5 3 1 2 2 5 0 6 7 0 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...