제출 #616932

#제출 시각아이디문제언어결과실행 시간메모리
616932Hanksburger원숭이와 사과 나무 (IZhO12_apple)C++17
100 / 100
368 ms123056 KiB
#include <bits/stdc++.h> using namespace std; int seg[10000005], lazy[10000005], tl[10000005], tr[10000005], cnt=1; void push(int i, int l, int r) { if (lazy[i]) { lazy[i]=0; seg[i]=r-l+1; if (!tl[i]) tl[i]=++cnt; if (!tr[i]) tr[i]=++cnt; lazy[tl[i]]=lazy[tr[i]]=1; } } void update(int i, int l, int r, int ql, int qr) { push(i, l, r); if (ql<=l && r<=qr) { lazy[i]=1; push(i, l, r); return; } if (!tl[i]) tl[i]=++cnt; if (!tr[i]) tr[i]=++cnt; int m=(l+r)/2; if (l<=qr && ql<=m) update(tl[i], l, m, ql, qr); if (m+1<=qr && ql<=r) update(tr[i], m+1, r, ql, qr); push(tl[i], l, m); push(tr[i], m+1, r); seg[i]=seg[tl[i]]+seg[tr[i]]; } int query(int i, int l, int r, int ql, int qr) { push(i, l, r); if (ql<=l && r<=qr) return seg[i]; if (!tl[i]) tl[i]=++cnt; if (!tr[i]) tr[i]=++cnt; int m=(l+r)/2, ans=0; if (l<=qr && ql<=m) ans+=query(tl[i], l, m, ql, qr); if (m+1<=qr && ql<=r) ans+=query(tr[i], m+1, r, ql, qr); return ans; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, c=0; cin >> n; for (int i=1; i<=n; i++) { int d, x, y; cin >> d >> x >> y; if (d==1) cout << (c=query(1, 1, 1e9, x+c, y+c)) << '\n'; else update(1, 1, 1e9, x+c, y+c); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...