#include<bits/stdc++.h>
#define int long long
using namespace std;
struct vertex
{
int sum = 0, lazy = 0;
vertex *leftcocuk = nullptr,*rightcocuk = nullptr;
};
void apply(vertex *node,int len, int val)
{
if(val==1)
{
node->lazy = val;
node->sum = len*val;
}
}
void push(vertex *node,int l,int r)
{
if(l==r) return;
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
{
int mid = l+r;
mid/=2;
push(node,l,r);
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 bul( vertex *node,int l,int r,int x,int y)
{
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 += bul(node->leftcocuk,l,mid,x,y);
if(y>=mid+1) ans+= bul(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 m;
int n = 1e9+1;
cin>> m;
int c = 0;
vertex v;
while(m--)
{
int num,x,y;
cin >> num >> x >> y;
if(num==1)
{
c = bul(&v,1,n,x+c,y+c);
cout << c << endl;
}
else
{
degis(&v,1,n,x+c,y+c,1);
}
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |