#include <bits/stdc++.h>
using namespace std;
#define left __left
#define right __right
const int inf = (int) 1e9 + 7;
struct node {
int sum = 0;
int lazy = 0;
node *left = nullptr;
node *right = nullptr;
};
typedef node* Node;
Node root = new node;
void down(Node cur, int l, int r) {
// if (l >= r || cur->lazy == 0) return;
if (cur->left == nullptr) cur->left = new node;
if (cur->right == nullptr) cur->right = new node;
if (cur->lazy > 0 && l < r) {
int g = (l + r) >> 1;
cur->left->sum = g - l + 1;
cur->right->sum = r - g;
cur->left->lazy = 1;
cur->right->lazy = 1;
}
cur->lazy = 0;
return;
}
void update(Node cur, int l, int r, int u, int v) {
if (l > v || u > r) return;
if (u <= l && r <= v) {
cur->sum = r - l + 1;
cur->lazy = 1;
return;
}
down(cur, l, r);
int g = (l + r) >> 1;
// if (cur->left == nullptr) cur->left = new node;
// if (cur->right == nullptr) cur->right = new node;
update(cur->left, l, g, u, v);
update(cur->right, g + 1, r, u, v);
cur->sum = cur->left->sum + cur->right->sum;
}
int get(Node cur, int l, int r, int u, int v) {
if (l > v || u > r) return 0;
if (u <= l && r <= v) return cur->sum;
down(cur, l, r);
int g = (l + r) >> 1;
return get(cur->left, l, g, u, v) + get(cur->right, g + 1, r, u, v);
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
if (fopen("test.inp","r")) {
freopen("test.inp","r",stdin);
freopen("test.out","w",stdout);
}
int n;
cin >> n;
int preAns = 0;
while (n--) {
int type, l, r;
cin >> type >> l >> r;
l += preAns;
r += preAns;
if (type == 2) {
update(root, 1, inf, l, r);
} else {
cout << (preAns = get(root, 1, inf, l, r)) << "\n";
}
}
return 0;
}
Compilation message (stderr)
apple.cpp: In function 'int main()':
apple.cpp:65:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
65 | freopen("test.inp","r",stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
apple.cpp:66:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
66 | freopen("test.out","w",stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |