#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 time | Memory | Grader output |
|---|
| Fetching results... |