Submission #380830

#TimeUsernameProblemLanguageResultExecution timeMemory
380830IloveNWall (IOI14_wall)C++14
100 / 100
809 ms171628 KiB
#include<bits/stdc++.h> #include "wall.h" using namespace std; #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define fi first #define se second #define mp make_pair #define pb push_back #define eb emplace_back #define all(vr) vr.begin(),vr.end() #define vi vector<int> #define vll vector<ll> const int N=2e6+10; struct segment_tree { pii it[N * 4]; int Size; pii combine(pii obj, pii range) { obj.fi = max(obj.fi, range.fi); obj.se = max(obj.se, range.fi); obj.fi = min(obj.fi, range.se); obj.se = min(obj.se, range.se); return obj; } void build(int id, int l, int r) { if (l == r) { it[id] = mp(0,1e5); return; } int mid = (l+r) / 2; build(id * 2, l, mid); build(id * 2 + 1, mid + 1, r); it[id] = combine(it[id * 2], it[id * 2 + 1]); } void update(int id, int l, int r, int pos, pii range) { if (l == r) { it[id] = range; return; } int mid = (l+r) / 2; if (pos <= mid) update(id * 2, l, mid, pos, range); else update(id * 2 + 1, mid + 1, r, pos, range); it[id] = combine(it[id * 2], it[id * 2 + 1]); } void change(int pos, pii range) { update(1, 1, Size, pos, range);} int get() { return it[1].fi;} } seg; struct event { int id; pii range; }; vector<event> vt[N]; void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ for (int i = 0; i < k; ++i) { pii range = mp(0,1e5); if (op[i] == 1) range.fi = height[i]; else range.se = height[i]; vt[left[i]].pb({i + 1, range}); vt[right[i] + 1].pb({i + 1, mp(0,1e5)}); } seg.Size = k; seg.build(1, 1, k); for (int i = 0; i < n; ++i) { for (event e : vt[i]) seg.change(e.id, e.range); finalHeight[i] = seg.get(); } return; } /*int main() { //freopen("ss.inp","r",stdin); ios::sync_with_stdio(false); cin.tie(0); return 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...