제출 #1094502

#제출 시각아이디문제언어결과실행 시간메모리
1094502anhthi벽 (IOI14_wall)C++14
100 / 100
413 ms89168 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define ll long long #define mp(x, y) make_pair(x, y) #define sz(v) ((int) (v).size()) #define all(v) (v).begin(), (v).end() #define MASK(i) (1LL << (i)) #define BIT(x, y) (((x) >> (y)) & 1) #define pb push_back #define max_rng *max_element #define min_rng *min_element #define rep(i, n) for(int i = 1, _n = (n); i <= _n; ++i) #define forn(i, a, b) for(int i = (a), _b = (b); i <= _b; ++i) #define ford(i, a, b) for(int i = (a), _b = (b); i >= _b; --i) template <class X, class Y> inline bool maximize(X &x, Y y) { return (x < y ? x = y, true : false); } template <class X, class Y> inline bool minimize(X &x, Y y) { return (x > y ? x = y, true : false); } template <class X> inline void compress(vector<X> &a) { sort(all(a)); a.resize(unique(all(a)) - a.begin()); } int ctz(ll x) { return __builtin_ctzll(x); } int lg(ll x) { return 63 - __builtin_clzll(x); } int popcount(ll x) { return __builtin_popcount(x); } mt19937_64 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); ll rand(ll l, ll r) { return l + abs((ll) rng()) % (r - l + 1); } const ll oo = (ll) 1e17; const int inf = (ll) 2e9 + 7, mod = (ll) 998244353; const int mxn = 2e5 + 5, LOG = 18; void add(int &x, int y) { x += y; if (x >= mod) x -= mod; } void sub(int &x, int y) { x -= y; if (x < 0) x += mod; } struct Seg { int n; vector<pair<int, int>> st; Seg(int n) : n(n) { st.resize(n << 2); } void setNode(int i, pair<int, int> val) { if (st[i].first > val.second) st[i] = mp(val.second, val.second); else if (st[i].second < val.first) st[i] = mp(val.first, val.first); else { st[i] = mp(max(st[i].first, val.first), min(st[i].second, val.second)); } } void down(int i) { if (st[i] == mp(-inf, inf)) return; setNode(2 * i, st[i]); setNode(2 * i + 1, st[i]); st[i] = mp(-inf, inf); } void upd(int i, int l, int r, int u, int v, pair<int, int> val) { if (l > v || r < u) return; if (l >= u && r <= v) return setNode(i, val); down(i); int m = (l + r) >> 1; upd(2 * i, l, m, u, v, val); upd(2 * i + 1, m + 1, r, u, v, val); } void upd(int u, int v, pair<int, int> val) { return upd(1, 0, n - 1, u, v, val); } void dfs(int i, int l, int r, int ans[]) { if (l == r) { ans[l] = st[i].first; return; } down(i); int m = (l + r) >> 1; dfs(2 * i, l, m, ans); dfs(2 * i + 1, m + 1, r, ans); } void dfs(int ans[]) { return dfs(1, 0, n - 1, ans); } }; void buildWall(int n, int k, int op[], int L[], int R[], int H[], int ans[]){ Seg s(n); forn(i, 0, k - 1) { int l = L[i]; int r = R[i]; int h = H[i]; if (op[i] == 1) s.upd(l, r, mp(h, inf)); else s.upd(l, r, mp(-inf, h)); } s.dfs(ans); return; } //int main(void) { // // ios_base::sync_with_stdio(0); // cin.tie(0); cout.tie(0); // // #define TASK "task" // if (fopen(TASK".inp", "r")) { // freopen(TASK".inp", "r", stdin); // freopen(TASK".out", "w", stdout); // } // // int n = 10, k = 6; // int op[] = {1, 2, 2, 1, 1, 2}; // int L[] = {1, 4, 3, 0, 2, 6}; // int R[] = {8, 9, 6, 5, 2, 7}; // int H[] = {4, 1, 5, 3, 5, 0}; // // int ans[n]; // memset(ans, 0, sizeof ans); // buildWall(n, k, op, L, R, H, ans); // // forn(i, 0, n - 1) cout << ans[i] << ' '; // // 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...