제출 #1284909

#제출 시각아이디문제언어결과실행 시간메모리
1284909zxzuam원숭이와 사과 나무 (IZhO12_apple)C++20
0 / 100
385 ms249536 KiB
#include <bits/stdc++.h> #define int long long using ll = long long; using namespace std; constexpr int maxn = (1ll << 17); int sz = 1; vector <int> t(maxn * 60), f(maxn * 60, -1), rv(maxn * 60), lv(maxn * 60); int C; void push(int v, int tl, int tr) { if(f[v] != -1) { t[v] = (tr - tl + 1) * f[v]; if(!rv[v]) rv[v] = ++sz; if(!lv[v]) lv[v] = ++sz; f[rv[v]] = f[ lv[v] ] = f[v]; f[v] = -1; } } void upd(int v, int tl, int tr, int l, int r, int x) { push(v, tl, tr); if(l > tr || tl > r) return; if(l <= tl && tr <= r) { f[v] = x; push(v, tl, tr); return; } int tm = (tl + tr) / 2; if(lv[v] == 0) lv[v] = ++sz; if(rv[v] == 0) rv[v] = ++sz; upd( lv[v], tl, tm, l, r, x); upd(rv[v], tm + 1, tr, l, r, x); t[v] = t[ lv[v] ] + t[ rv[v] ]; } int get(int v, int tl, int tr, int l, int r) { push(v, tl, tr); if(l > tr || tl > r) return 0; if(l <= tl && tr <= r) return t[v]; int tm = (tl + tr) / 2; int res = 0; if(lv[v] != 0) res += get(lv[v], tl, tm, l, r); if(rv[v] != 0) res += get(rv[v], tm + 1, tr, l, r); return res; } void orz() { int N; cin >> N; vector <int> D(N + 1), X(N + 1), Y(N + 1); for(int i = 1; i <= N; i++) { cin >> D[i] >> X[i] >> Y[i]; } const int L = 1E9; for(int i = 1; i <= N; i++) { X[i] += C; Y[i] += C; if(D[i] == 2) { upd(1, 1, L, X[i], Y[i], 1); } else{ C = get(1, 1, L, X[i], Y[i]); cout << C << '\n'; } } } int32_t main() { ios_base::sync_with_stdio(false), cin.tie(nullptr); //freopen("promote.in", "r", stdin); //freopen("promote.out", "w", stdout); int T = 1; //cin >> T; while(T--) orz(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...