| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1293125 | cansu_mutlu | Monkey and Apple-trees (IZhO12_apple) | C++20 | 0 ms | 0 KiB |
#include<bits/Stdc++.h>
#define int long long
using namespace std;
struct vertex
{
int sum = 0;
int lazy = 0;
vertex *leftcocuk = nullptr, *rightcocuk = nullptr;
};
void apply(vertex *node,int len,int val)
{
if(val==1)
{
node->lazy = val;
node->sum = val*len;
}
}
void push(vertex *node,int l,int r)
{
if(node->leftcocuk==nullptr) node->leftcocuk =new vertex;
if(node->rightcocuk == nullptr) node->rightcocuk = new vertex;
int mid = l+r;
mid/=2;
apply(node->leftcocuk,mid-l+1,node->lazy);
apply(node->rightcocuk,r-mid,node->lazy);
}
void degis( vertex *node,int l,int r,int x,int y,int val)
{
if(l>=x && r<=y) apply(node,r-l+1,val);
else
{
push(node,l,r);
int mid = l+r;
mid/=2;
if(x<=mid) degis(node->leftcocuk,l,mid,x,y,val);
if(y>=mid+1) degis(node->rightcocuk,mid+1,r,x,y,val);
node->sum = node->leftcocuk->sum+node->rightcocuk->sum;
}
}
int gt(vertex *node,int l,int r,int x,int y)
{
//cout <<l << " "<< r << " " << x << " " << y << endl;
if(l>=x && r<=y) return node->sum;
int mid = l+r;
mid/=2;
int ans = 0;
push(node,l,r);
if(x<=mid) ans+= gt(node->leftcocuk,l,mid,x,y);
if(y>=mid+1) ans+= gt(node->rightcocuk,mid+1,r,x,y);
return ans;
}
int32_t main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n;
cin >> n;
int c = 0;
vertex node = {0,0};
int mxn = 1e9+1;
while(n--)
{
int num,x,y;
cin >> num >> x >> y;
if(num==1)
{
c = gt(&node,1,mxn,x+c,y+c);
cout << c << endl;
}
else degis(&node,1,mxn,x+c,y+c,1);
}
}
