#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fr first
#define sc second
#define pb push_back
#define all(x) x.begin(),x.end()
#define sp << " " <<
#define inf 1e15
#define N 1000
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
typedef tuple<int,int,int> tiii;
typedef pair<int,int> pii;
struct Node{
Node *l,*r;
int val;
Node(){
val=0;
l=0;r=0;
}
};
int c=0;
Node *root=new Node();
void update(Node *node,int l,int r,int ql,int qr){
if(r<ql || qr<l) return;
//~ cout << l sp r << "\n";
if(ql<=l && r<=qr){
node->val=r-l+1;
return;
}
if(node->val) return;
int mid=(l+r)/2;
if(mid>=ql && !node->l) node->l=new Node();
if(mid+1<=qr && !node->r) node->r=new Node();
update(node->l,l,mid,ql,qr);
update(node->r,mid+1,r,ql,qr);
}
int query(Node *node,int l,int r,int ql,int qr){
if(r<ql || qr<l || !node) return 0;
if(node->val)
return min(r,qr)-max(l,ql)+1;
int mid=(l+r)/2;
return query(node->l,l,mid,ql,qr)+query(node->r,mid+1,r,ql,qr);
}
void solve(){
int t,x,y;
cin >> t >> x >> y;
if(t==1){
c=query(root,1,1e9,x+c,y+c);
cout << c << "\n";
}
if(t==2)
update(root,1,1e9,x+c,y+c);
}
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
int test=1;
cin >> test;
while(test--) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |