// File F.cpp created on 08.08.2025 at 20:15:00
#include <bits/stdc++.h>
using i64 = long long;
#ifdef DEBUG
#include "/home/ahmetalp/Desktop/Workplace/debug.h"
#else
#define debug(...) void(23)
#endif
int Q;
constexpr int N = int(1E9);
constexpr int max_Q = int(1E5) + 5;
constexpr int LOG = 65;
struct node {
int sum = 0, lc = -1, rc = -1;
bool lz = false;
node() {}
} tree[max_Q * LOG];
int node_alloc = 0;
int new_node() {
return node_alloc++;
}
#define def int mid = (l + r) >> 1;
void push(int v, int l, int r) {
def;
if (tree[v].lc == -1) {
tree[v].lc = new_node();
tree[v].rc = new_node();
}
if (tree[v].lz) {
tree[tree[v].lc].lz = true;
tree[tree[v].lc].sum = mid - l + 1;
tree[tree[v].rc].lz = true;
tree[tree[v].rc].sum = r - mid;
tree[v].lz = false;
}
}
void modify(int v, int l, int r, int ql, int qr) {
if (ql == l && r == qr) {
tree[v].lz = true;
tree[v].sum = r - l + 1;
return;
}
push(v, l, r);
def;
if (qr <= mid) {
modify(tree[v].lc, l, mid, ql, qr);
} else if (mid + 1 <= ql) {
modify(tree[v].rc, mid + 1, r, ql, qr);
} else {
modify(tree[v].lc, l, mid, ql, mid);
modify(tree[v].rc, mid + 1, r, mid + 1, qr);
}
tree[v].sum = tree[tree[v].lc].sum + tree[tree[v].rc].sum;
}
int get(int v, int l, int r, int ql, int qr) {
if (ql == l && r == qr) {
return tree[v].sum;
}
push(v, l, r);
def;
if (qr <= mid) {
return get(tree[v].lc, l, mid, ql, qr);
} else if (mid + 1 <= ql) {
return get(tree[v].rc, mid + 1, r, ql, qr);
} else {
return get(tree[v].lc, l, mid, ql, mid)
+ get(tree[v].rc, mid + 1, r, mid + 1, qr);
}
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> Q;
int root = new_node();
int C = 0;
while (Q--) {
int TP, X, Y;
std::cin >> TP >> X >> Y;
X += C;
Y += C;
if (TP == 1) {
int ans = get(root, 1, N, X, Y);
std::cout << ans << '\n';
C = ans;
} else {
modify(root, 1, N, X, Y);
}
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |