제출 #1278748

#제출 시각아이디문제언어결과실행 시간메모리
1278748Robert_junior원숭이와 사과 나무 (IZhO12_apple)C++20
0 / 100
230 ms126116 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pb push_back #define all(x) x.begin(), x.end() #define ins insert #define F first #define S second const int N = 1e5 + 7, inf = 2e9; int t[N * 40], mod1[N * 40], L[N * 40], R[N * 40], timer = 1; void push(int v, int l, int r){ if(l == r) return; int m = (l + r) / 2; if(mod1[v]){ if(L[v]) t[L[v]] = (m - l + 1); if(R[v]) t[R[v]] = (r - m); if(L[v]) mod1[L[v]] = 1; if(R[v]) mod1[R[v]] = 1; mod1[v] = 0; } } void upd(int v, int l, int r, int ll, int rr, int j){ if(!L[v]) L[v] = ++timer; if(!R[v]) R[v] = ++timer; push(v, ll, rr); if(l <= ll && rr <= r){ t[v] = rr - ll + 1; mod1[v] = 1; return; } if(l > rr || ll > r){ return; } int m = (ll + rr) / 2; upd(L[v], l, r, ll, m, j); upd(R[v], l, r, m + 1, rr, j); t[v] = t[L[v]] + t[R[v]]; } int get(int v, int l, int r, int ll, int rr){ if(!L[v]) L[v] = ++timer; if(!R[v]) R[v] = ++timer; push(v, ll, rr); if(l <= ll && rr <= r) return t[v]; if(l > rr || ll > r) return 0; int m = (ll + rr) / 2; return get(L[v], l, r, ll, m) + get(R[v], l, r, m + 1, rr); } void solve(){ int q; cin>>q; int ans = 0; while(q--){ int f, l, r; cin>>f>>l>>r; l += ans; r += ans; if(f == 1){ ans = get(1, l, r, 1, inf); cout<<ans<<'\n'; } else{ upd(1, l, r, 1, inf, 0); } } } signed main(){ ios_base :: sync_with_stdio(false); cin.tie(0); //freopen("area.in", "r", stdin); //freopen("area.out", "w", stdout); int t = 1; //cin>>t; while(t--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...