#include<bits/stdc++.h>
using namespace std;
#define sz(x) (int)x.size()
typedef long long int ll;
const ll N = 5e5+20, MOD = 1e9+7;
ll n,q,l,r,tree[6*N],lazy[6*N],a[N];
set<ll> in,out;
set<ll>::iterator itr;
void lazyUpd(ll node,ll st,ll en,ll l,ll r,ll val){
if(lazy[node]){
tree[node]+=(en-st+1)*lazy[node];
if(st!=en)
{
lazy[2*node]+=lazy[node];
lazy[2*node+1]+=lazy[node];
}
lazy[node]=0;
}
if(st>en || l > en || r < st)
return ;
if(l<=st && en<=r)
{
tree[node]+=(en-st+1)*val;
if(st!=en)
{
lazy[2*node]+=val;
lazy[2*node+1]+=val;
}
return ;
}
ll mid=(st+en)/2;
lazyUpd(2*node,st,mid,l,r,val);
lazyUpd(2*node+1,mid+1,en,l,r,val);
tree[node]=tree[2*node]+tree[2*node+1];
}
ll lazyQuery(ll node,ll st,ll en,ll l,ll r)
{
if(st>en || l > en || r < st)
return 0;
if(lazy[node])
{
tree[node]+=(en-st+1)*lazy[node];
if(st!=en)
{
lazy[2*node]+=lazy[node];
lazy[2*node+1]+=lazy[node];
}
lazy[node]=0;
}
if(st>=l && r>=en)
return tree[node];
ll mid=(st+en)/2;
ll p1=lazyQuery(2*node,st,mid,l,r);
ll p2=lazyQuery(2*node+1,mid+1,en,l,r);
return (p1+p2);
}
void cal(ll *cur,ll *aft,ll *bef,set<ll> s, ll y){
itr=s.upper_bound(y);
if(itr==s.end())
(*aft)=n+1;
else
(*aft)=(*itr);
itr=s.lower_bound(y);
if(itr==s.begin())
(*bef)=0;
else{
itr--;
(*bef)=(*itr);
}
return ;
}
void bhencho(ll pr,ll y, ll z){
ll ba,bp,bc=-1,mc=-1,ma,mp,cur,nxt;
cal(&mc,&ma,&mp,in,y);
cal(&bc,&ba,&bp,out,y);
if(z<l){
if(ba>ma)
nxt=ba-ma;
else
nxt=0;
cur=ba-y;
if(pr>=l && pr<=r){
lazyUpd(1,1,n,max(mp+1,bp+1),y,nxt-cur);
in.erase(in.find(y));
}else if(pr>r){
if(mp>bp)
lazyUpd(1,1,n,bp+1,mp,ba-y);
lazyUpd(1,1,n,max(bp+1,mp+1),y,nxt);
out.erase(out.find(y));
}
}else if(z>=l && z<=r){
in.insert(y);
if(ba>ma)
cur=ba-ma;
else
cur=0;
if(pr<l){
lazyUpd(1,1,n,max(mp+1,bp+1),y,(ba-y)-cur);
}else if(pr>r){
lazyUpd(1,1,n,bp+1,y,ba-y);
out.erase(out.find(y));
}
}else if(z>r){
out.insert(y);
// cur=ba-y;
if(pr<l){
if(ba>ma)
cur=ba-ma;
else
cur=0;
if(mp>bp)
lazyUpd(1,1,n,bp+1,mp,y-ba);
lazyUpd(1,1,n,max(bp+1,mp+1),y,-cur);
}else if(pr>=l && pr<=r){
cur=ba-y;
lazyUpd(1,1,n,bp+1,y,-cur);
in.erase(in.find(y));
}
}
}
ll firse(ll pr,ll y, ll z){ // calculate using z...
ll ba,bp,bc=-1,mc=-1,ma,mp,cur,nxt;
cal(&mc,&ma,&mp,in,z);
cal(&bc,&ba,&bp,out,z);
if(pr>r){
return lazyQuery(1,1,n,y,z);
}else if(pr>=l && pr<=r){
ll anss=0;
if(bp>=y){
anss+=lazyQuery(1,1,n,y,z);
anss-=/*lazyQuery(1,1,n,bp+1,z)*/((z-bp)*(ba-z-1));
return anss;
}else{
anss+=lazyQuery(1,1,n,y,z);
anss-=((z-y+1)*(ba-z-1));
return anss;
}
}else if(pr<l){
ll anss=0;
if(bp>=y){
if(mp<bp)
return lazyQuery(1,1,n,y,bp);
anss=lazyQuery(1,1,n,y,mp)-((mp-bp)*(ba-z-1));
return anss;
}else{
if(mp<y)
return anss;
anss+=lazyQuery(1,1,n,y,mp)-((mp-y+1)*(ba-z-1));
return anss;
}
}
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin >> n >> q >> l >> r;
while(q--){
int x;
ll pr;
cin >> x;
if(x==1){
ll y,z;
cin >> y >> z;
pr=a[y];
a[y]=z;
bhencho(pr,y,z);
}else{
ll y,z;
cin >> y >> z;
pr=a[z];
cout << firse(pr,y,z) << endl;
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgc3ooeCkgKGludCl4LnNpemUoKQp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgbGw7CiAKY29uc3QgbGwgTiA9IDVlNSsyMCwgTU9EID0gMWU5Kzc7CiAKbGwgbixxLGwscix0cmVlWzYqTl0sbGF6eVs2Kk5dLGFbTl07CnNldDxsbD4gaW4sb3V0OwpzZXQ8bGw+OjppdGVyYXRvciBpdHI7CiAKdm9pZCBsYXp5VXBkKGxsIG5vZGUsbGwgc3QsbGwgZW4sbGwgbCxsbCByLGxsIHZhbCl7CiAgICBpZihsYXp5W25vZGVdKXsKICAgICAgIHRyZWVbbm9kZV0rPShlbi1zdCsxKSpsYXp5W25vZGVdOwogICAgICAgaWYoc3QhPWVuKQogICAgICAgewogICAgICAgICAgIGxhenlbMipub2RlXSs9bGF6eVtub2RlXTsKICAgICAgICAgICBsYXp5WzIqbm9kZSsxXSs9bGF6eVtub2RlXTsKICAgICAgIH0KICAgICAgIGxhenlbbm9kZV09MDsKICAgIH0KIAogICAgaWYoc3Q+ZW4gfHwgbCA+IGVuIHx8IHIgPCBzdCkKICAgICAgICByZXR1cm4gOwogICAgaWYobDw9c3QgJiYgZW48PXIpCiAgICB7CiAgICAgICAgdHJlZVtub2RlXSs9KGVuLXN0KzEpKnZhbDsKICAgICAgICBpZihzdCE9ZW4pCiAgICAgICAgewogICAgICAgICAgICBsYXp5WzIqbm9kZV0rPXZhbDsKICAgICAgICAgICAgbGF6eVsyKm5vZGUrMV0rPXZhbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDsKICAgIH0KICAgIGxsIG1pZD0oc3QrZW4pLzI7CiAgICBsYXp5VXBkKDIqbm9kZSxzdCxtaWQsbCxyLHZhbCk7CiAgICBsYXp5VXBkKDIqbm9kZSsxLG1pZCsxLGVuLGwscix2YWwpOwogICAgdHJlZVtub2RlXT10cmVlWzIqbm9kZV0rdHJlZVsyKm5vZGUrMV07Cn0KIApsbCBsYXp5UXVlcnkobGwgbm9kZSxsbCBzdCxsbCBlbixsbCBsLGxsIHIpCnsKICAgIGlmKHN0PmVuIHx8IGwgPiBlbiB8fCByIDwgc3QpCiAgICAgICAgcmV0dXJuIDA7CiAgICBpZihsYXp5W25vZGVdKQogICAgewogICAgICAgIHRyZWVbbm9kZV0rPShlbi1zdCsxKSpsYXp5W25vZGVdOwogICAgICAgIGlmKHN0IT1lbikKICAgICAgICB7CiAgICAgICAgICAgIGxhenlbMipub2RlXSs9bGF6eVtub2RlXTsKICAgICAgICAgICAgbGF6eVsyKm5vZGUrMV0rPWxhenlbbm9kZV07CiAgICAgICAgfQogICAgICAgIGxhenlbbm9kZV09MDsKICAgIH0KICAgIGlmKHN0Pj1sICYmIHI+PWVuKQogICAgICAgIHJldHVybiB0cmVlW25vZGVdOwogICAgbGwgbWlkPShzdCtlbikvMjsKICAgIGxsIHAxPWxhenlRdWVyeSgyKm5vZGUsc3QsbWlkLGwscik7CiAgICBsbCBwMj1sYXp5UXVlcnkoMipub2RlKzEsbWlkKzEsZW4sbCxyKTsKICAgIHJldHVybiAocDErcDIpOwp9CiAKdm9pZCBjYWwobGwgKmN1cixsbCAqYWZ0LGxsICpiZWYsc2V0PGxsPiBzLCBsbCB5KXsKCWl0cj1zLnVwcGVyX2JvdW5kKHkpOwoJaWYoaXRyPT1zLmVuZCgpKQoJCSgqYWZ0KT1uKzE7CgllbHNlCgkJKCphZnQpPSgqaXRyKTsKCWl0cj1zLmxvd2VyX2JvdW5kKHkpOwoJaWYoaXRyPT1zLmJlZ2luKCkpCgkJKCpiZWYpPTA7CgllbHNlewoJCWl0ci0tOwoJCSgqYmVmKT0oKml0cik7Cgl9CglyZXR1cm4gOwp9CnZvaWQgYmhlbmNobyhsbCBwcixsbCB5LCBsbCB6KXsKCWxsIGJhLGJwLGJjPS0xLG1jPS0xLG1hLG1wLGN1cixueHQ7CgljYWwoJm1jLCZtYSwmbXAsaW4seSk7CgljYWwoJmJjLCZiYSwmYnAsb3V0LHkpOwoJaWYoejxsKXsKCQlpZihiYT5tYSkKCQkJbnh0PWJhLW1hOwoJCWVsc2UKCQkJbnh0PTA7CgkJY3VyPWJhLXk7CgkJaWYocHI+PWwgJiYgcHI8PXIpewoJCQlsYXp5VXBkKDEsMSxuLG1heChtcCsxLGJwKzEpLHksbnh0LWN1cik7CgkJCWluLmVyYXNlKGluLmZpbmQoeSkpOwoJCX1lbHNlIGlmKHByPnIpewoJCQlpZihtcD5icCkKCQkJCWxhenlVcGQoMSwxLG4sYnArMSxtcCxiYS15KTsKCQkJbGF6eVVwZCgxLDEsbixtYXgoYnArMSxtcCsxKSx5LG54dCk7CgkJCW91dC5lcmFzZShvdXQuZmluZCh5KSk7CgkJfQoJfWVsc2UgaWYoej49bCAmJiB6PD1yKXsKCQlpbi5pbnNlcnQoeSk7CgkJaWYoYmE+bWEpCgkJCWN1cj1iYS1tYTsKCQllbHNlCgkJCWN1cj0wOwoJCWlmKHByPGwpewoJCQlsYXp5VXBkKDEsMSxuLG1heChtcCsxLGJwKzEpLHksKGJhLXkpLWN1cik7CgkJfWVsc2UgaWYocHI+cil7CgkJCWxhenlVcGQoMSwxLG4sYnArMSx5LGJhLXkpOwoJCQlvdXQuZXJhc2Uob3V0LmZpbmQoeSkpOwoJCX0KCX1lbHNlIGlmKHo+cil7CgkJb3V0Lmluc2VydCh5KTsKCQkvLyBjdXI9YmEteTsKCQlpZihwcjxsKXsKCQkJaWYoYmE+bWEpCgkJCQljdXI9YmEtbWE7CgkJCWVsc2UKCQkJCWN1cj0wOwoJCQlpZihtcD5icCkKCQkJCWxhenlVcGQoMSwxLG4sYnArMSxtcCx5LWJhKTsKCQkJbGF6eVVwZCgxLDEsbixtYXgoYnArMSxtcCsxKSx5LC1jdXIpOwoJCX1lbHNlIGlmKHByPj1sICYmIHByPD1yKXsKCQkJY3VyPWJhLXk7CgkJCWxhenlVcGQoMSwxLG4sYnArMSx5LC1jdXIpOwoJCQlpbi5lcmFzZShpbi5maW5kKHkpKTsKCQl9Cgl9Cn0KIApsbCBmaXJzZShsbCBwcixsbCB5LCBsbCB6KXsgLy8gY2FsY3VsYXRlIHVzaW5nIHouLi4KCWxsIGJhLGJwLGJjPS0xLG1jPS0xLG1hLG1wLGN1cixueHQ7CgljYWwoJm1jLCZtYSwmbXAsaW4seik7CgljYWwoJmJjLCZiYSwmYnAsb3V0LHopOwoJaWYocHI+cil7CgkJcmV0dXJuIGxhenlRdWVyeSgxLDEsbix5LHopOwoJfWVsc2UgaWYocHI+PWwgJiYgcHI8PXIpewoJCWxsIGFuc3M9MDsKCQlpZihicD49eSl7CgkJCWFuc3MrPWxhenlRdWVyeSgxLDEsbix5LHopOwoJCQlhbnNzLT0vKmxhenlRdWVyeSgxLDEsbixicCsxLHopKi8oKHotYnApKihiYS16LTEpKTsKCQkJcmV0dXJuIGFuc3M7CgkJfWVsc2V7CgkJCWFuc3MrPWxhenlRdWVyeSgxLDEsbix5LHopOwoJCQlhbnNzLT0oKHoteSsxKSooYmEtei0xKSk7CgkJCXJldHVybiBhbnNzOwoJCX0KCX1lbHNlIGlmKHByPGwpewoJCWxsIGFuc3M9MDsKCQlpZihicD49eSl7CgkJCWlmKG1wPGJwKQoJCQkJcmV0dXJuIGxhenlRdWVyeSgxLDEsbix5LGJwKTsKCQkJYW5zcz1sYXp5UXVlcnkoMSwxLG4seSxtcCktKChtcC1icCkqKGJhLXotMSkpOwoJCQlyZXR1cm4gYW5zczsKCQl9ZWxzZXsKCQkJaWYobXA8eSkKCQkJCXJldHVybiBhbnNzOwoJCQlhbnNzKz1sYXp5UXVlcnkoMSwxLG4seSxtcCktKChtcC15KzEpKihiYS16LTEpKTsKCQkJcmV0dXJuIGFuc3M7CgkJfQoJfQp9CiAKaW50IG1haW4oKQp7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSksY2luLnRpZSgwKSxjb3V0LnRpZSgwKTsKICAgIGNpbiA+PiBuID4+IHEgPj4gbCA+PiByOwogICAgd2hpbGUocS0tKXsKICAgIAlpbnQgeDsKICAgIAlsbCBwcjsKICAgIAljaW4gPj4geDsKICAgIAlpZih4PT0xKXsKICAgIAkJbGwgeSx6OwogICAgCQljaW4gPj4geSA+PiB6OwogICAgCQlwcj1hW3ldOwogICAgCQlhW3ldPXo7CiAgICAJCWJoZW5jaG8ocHIseSx6KTsKICAgIAl9ZWxzZXsKICAgIAkJbGwgeSx6OwogICAgCQljaW4gPj4geSA+PiB6OwogICAgCQlwcj1hW3pdOwogICAgCQljb3V0IDw8IGZpcnNlKHByLHkseikgPDwgZW5kbDsKICAgIAl9CiAgICB9CiAgICByZXR1cm4gMDsKfSAg