#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for (int i = (a), _b = (b); i <= (_b); ++i)
#define FORD(i,a,b) for (int i = (a), _b = (b); i >= (_b); --i)
#define getBit(mask,i) (((mask) >> (i)) & (1LL))
#define MASK(x) (1LL << (x))
#define allof(x) begin(x), end(x)
#define el cout << '\n';
//--Compare------------------------------------------------------------------------------------
template<class X, class Y>
inline bool maximize(X &x, const Y &y){ return (x < y) ? x = y, 1 : 0; }
template<class X, class Y>
inline bool minimize(X &x, const Y &y){ return (x > y) ? x = y, 1 : 0; }
//--Process------------------------------------------------------------------------------------
// #define int long long
struct DynamicSegmentTree
{
struct Node
{
Node *left, *right;
int lazy, sum;
Node()
{
left = right = nullptr;
sum = 0;
lazy = -1;
}
};
Node *root = new Node();
void apply(Node *cur, int l, int r, int val)
{
if (val == -1) return;
(cur->sum) = 1LL * (r - l + 1) * val;
(cur->lazy) = val;
}
void down(Node *cur, int l, int r)
{
if (cur->left == nullptr) cur->left = new Node();
if (cur->right == nullptr) cur->right = new Node();
int mid = (l + r) >> 1;
apply(cur->left, l, mid, cur->lazy);
apply(cur->right, mid + 1, r, cur->lazy);
cur->lazy = -1;
}
void update_(int u, int v, int val, int l, int r, Node *cur)
{
if (v < l || r < u) return;
if (u <= l && r <= v) return (void) (apply(cur, l, r, val));
down(cur, l, r);
int mid = (l + r) >> 1;
update_(u, v, val, l, mid, cur->left);
update_(u, v, val, mid + 1, r, cur->right);
cur->sum = cur->left->sum + cur->right->sum;
}
int get_(int u, int v, int l, int r, Node *cur)
{
if (v < l || r < u) return 0;
if (u <= l && r <= v) return cur->sum;
down(cur, l, r);
int mid = (l + r) >> 1;
return get_(u, v, l, mid, cur->left) + get_ (u, v, mid + 1, r, cur->right);
}
void update(int u, int v, int val) { update_(u, v, val, 1, 1e9, root); }
int get(int u, int v) { return get_(u, v, 1, 1e9, root); }
};
signed main(void)
{
cin.tie(nullptr)->sync_with_stdio(false);
// cin.exceptions(cin.failbit);
#define task "f"
if (fopen(task".INP", "r"))
{
freopen(task".INP", "r", stdin);
freopen(task".OUT", "w", stdout);
}
//--OpenFile-------------------------------------------------------------------------------
int q, C = 0; cin >> q;
DynamicSegmentTree IT;
IT.update(1, 1e9, 0);
while (q--)
{
int cmd, l, r; cin >> cmd >> l >> r;
if (cmd == 1)
{
C = IT.get(l + C, r + C);
cout << C << '\n';
}
if (cmd == 2)
{
IT.update(l + C, r + C, 1);
}
}
cerr << (1.0 * clock() / CLOCKS_PER_SEC);
return 0;
}
Compilation message (stderr)
apple.cpp: In function 'int main()':
apple.cpp:94:15: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
94 | freopen(task".INP", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
apple.cpp:95:15: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
95 | freopen(task".OUT", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |