#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mxN = 200005;
const int N = 1e9;
int q;
int idx = 0;
int root, ls[50 * mxN], rs[50 * mxN], bor[50 * mxN], lenj[50 * mxN];
void propagate(int v, int tl, int tr)
{
if (lenj[v] != 0)
{
bor[v] = (tr - tl + 1);
if (tl != tr)
{
if (!ls[v])
ls[v] = ++idx;
lenj[ls[v]] = lenj[v];
if (!rs[v])
rs[v] = ++idx;
lenj[rs[v]] = lenj[v];
}
lenj[v] = 0;
}
}
void lazyupd(int &v, int tl, int tr, int l, int r, int val)
{
if (!v)
v = ++idx;
propagate(v, tl, tr);
if (tl > tr || l > tr || tl > r)
return;
if (tl >= l && tr <= r)
{
lenj[v] = val;
propagate(v, tl, tr);
return;
}
int mid = (tl + tr) / 2;
lazyupd(ls[v], tl, mid, l, r, val);
lazyupd(rs[v], mid + 1, tr, l, r, val);
bor[v] = bor[ls[v]] + bor[rs[v]];
}
int kverif(int v, int tl, int tr, int l, int r)
{
propagate(v, tl, tr);
if (!v || tl > r || l > tr)
return 0;
if (tl >= l && tr <= r)
return bor[v];
int mid = (tl + tr) / 2;
return kverif(ls[v], tl, mid, l, r) + kverif(rs[v], mid + 1, tr, l, r);
}
int main()
{
scanf("%d", &q);
int last = 0;
while (q--)
{
int t, l, r;
scanf("%d %d %d", &t, &l, &r);
l += last;
r += last;
if (t == 1)
{
last = kverif(root, 1, N, l, r);
printf("%d\n", last);
}
else
lazyupd(root, 1, N, l, r, 1);
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
apple.cpp: In function 'int main()':
apple.cpp:62:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
62 | scanf("%d", &q);
| ~~~~~^~~~~~~~~~
apple.cpp:67:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
67 | scanf("%d %d %d", &t, &l, &r);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |