# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
783641 | ezraft | Monkey and Apple-trees (IZhO12_apple) | C++14 | 1 ms | 212 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 MAXN = 1 << 30;
struct Node
{
int t, d;
Node* ch[2];
};
Node* make()
{
Node* v = new Node();
v->t = v->d = 0;
for (int i = 0; i < 2; i++)
{
v->ch[i] = NULL;
}
return v;
}
struct Seg
{
int n;
Node* rt;
Seg (int _n)
{
n = _n;
rt = make();
}
void apply (Node* p, bool v, int sz)
{
if (v)
{
p->d = 1;
p->t = sz;
}
}
void pull (Node* p, int sz)
{
p->t = p->d?sz : p->ch[0]->t + p->ch[1]->t;
}
void push (Node* p, int cl, int cm, int cr)
{
if (cl == cr)
{
return;
}
for (int i = 0; i < 2; i++)
{
if (p->ch[i] == NULL)
{
p->ch[i] = make();
}
}
apply(p->ch[0], p->d, cm - cl + 1);
apply(p->ch[1], p->d, cr - cm);
p->d = 0;
}
void upd (int l, int r, int cl, int cr, Node* p)
{
if (cr < l || cl > r)
{
return;
}
int cm = (cl + cr)/2;
push(p, cl, cm, cr);
if (l <= cl && cr <= r)
{
apply(p, 1, cr - cl + 1);
return;
}
upd(l, r, cl, cm, p->ch[0]);
upd(l, r, cm + 1, cr, p->ch[1]);
pull(p, cr - cl + 1);
}
void upd (int l, int r)
{
upd(l,r,0,MAXN-1,rt);
}
int query (int l, int r, int cl, int cr, Node* p)
{
if (cr < l || cl > r)
{
return 0;
}
int cm = (cl + cr)/2;
push(p, cl, cm, cr);
if (l <= cl && cr <= r)
{
return p->t;
}
int sz = min(cr, r) - max(cl, l) + 1;
return p->d? sz : query(l,r,cl,cm, p->ch[0]) + query(l,r,cm + 1, cr, p->ch[1]);
}
int query (int l, int r)
{
return query(l,r,0,MAXN-1,rt);
}
};
int main()
{
ifstream cin("f.in");
ofstream cout("f.out");
int n;
cin >> n;
int c = 0;
Seg t(MAXN);
for (int i = 0; i < n; i++)
{
int ty;
cin >> ty;
if (ty == 2)
{
int l, r;
cin >> l >> r;
l--,r--;
l += c, r += c;
t.upd(l,r);
} else
{
int l, r;
cin >> l >> r;
l--,r--;
l += c, r += c;
int z = t.query(l,r);
cout << z << "\n";
c = z;
}
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |