# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
90278 | YottaByte | Monkey and Apple-trees (IZhO12_apple) | C++14 | 657 ms | 214652 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int N = 1e8 + 1;
int t[2 * N], h[2 * N];
int c;
void push(int v, int l, int r)
{
if(!h[v]) return;
if(l == r)
{
t[v] = (r - l + 1) * h[v];
h[v] = 0;
return;
}
else
{
t[v] = (r - l + 1) * h[v];
h[v + v] = h[v];
h[v + v + 1] = h[v];
h[v] = 0;
return;
}
}
void upd(int v, int l, int r, int ql, int qr)
{
int mid = l + r >> 1;
if(r < ql || l > qr) return;
if(ql <= l && r <= qr)
{
h[v] = 1;
push(v, l, r);
return;
}
else
{
upd(v + v, l, mid, ql, qr);
upd(v + v + 1, mid + 1, r, ql, qr);
}
push(v + v, l, mid);
push(v + v + 1, mid + 1, r);
t[v] = t[v + v] + t[v + v + 1];
}
int getsum(int v, int l, int r, int ql, int qr)
{
push(v, l, r);
if(r < ql || l > qr) return 0;
if(ql <= l && r <= qr)
{
return t[v];
}
else
{
int mid = l + r >> 1;
return getsum(v + v, l, mid, ql, qr) + getsum(v + v + 1, mid + 1, r, ql, qr);
}
}
main()
{
int m; cin >> m;
while(m--)
{
int d, l, r;
cin >> d >> l >> r;
if(d % 2)
{
c = getsum(1, 1, N, l + c, r + c);
//if(r + c > N - 1) assert(0);
cout << c << endl;
}
else
{
upd(1, 1, N, l + c, r + c);
}
}
}
/*
6
2 1 7
2 10 12
1 7 11
2 11 13
1 8 10
1 15 17
*/
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |