#include<bits/stdc++.h>
using namespace std;
long long read()
{
long long x=0,t=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')t=-t;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x*t;
}
struct OPER{long long op,l,r,c,id;}q[50005],q1[50005],q2[50005];
long long Res[50005],qnum,all,N;
vector<long long> V;bitset<50005> B;
int getid(long long x){return lower_bound(V.begin(),V.end(),x)-V.begin()+1;}
long long t1[50005],t2[50005];
int lb(int x){return x&(-x);}
void update(int x,long long val){if(!x)return;for(int i=x;i<=N;i+=lb(i))t1[i]+=val*x,t2[i]+=val;}
long long query(int x){long long res=0;for(int i=x;i>=1;i-=lb(i))res-=t1[i],res+=t2[i]*(x+1);return res;}
void show(long long vl,long long vr,int ql,int qr)
{
cout<<vl<<" "<<vr<<" "<<ql<<" "<<qr<<endl;
for(int i=ql;i<=qr;i++)cout<<q[i].op<<" "<<q[i].l<<" "<<q[i].r<<" "<<q[i].c<<" "<<q[i].id<<endl;
cout<<endl;
}
void sol(long long vl,long long vr,int ql,int qr)
{
// show(vl,vr,ql,qr);
if(ql>qr)return;
if(vl==vr){for(int i=ql;i<=qr;i++)if(q[i].op==2)Res[q[i].id]=vl;return;}
int mid=vl+vr>>1;
for(int i=ql,tmp;i<=qr;i++)
{
if(q[i].op==1)if(getid(q[i].c)<=mid)update(q[i].l,1),update(q[i].r+1,-1),B[i]=0;else B[i]=1;
if(q[i].op==2)if((tmp=query(q[i].r)-query(q[i].l-1))>=q[i].c)B[i]=0;else B[i]=1,q[i].c-=tmp;
}
int t1=0,t2=0;
for(int i=ql;i<=qr;i++)
{
if(q[i].op==1)if(getid(q[i].c)<=mid)update(q[i].l,-1),update(q[i].r+1,1);
if(B[i])q2[++t2]=q[i];
else q1[++t1]=q[i];
}
for(int i=ql;i-ql+1<=t1;i++)q[i]=q1[i-ql+1];for(int i=ql+t1;i<=qr;i++)q[i]=q2[i-ql-t1+1];
sol(vl,mid,ql,ql+t1-1);sol(mid+1,vr,ql+t1,qr);
}
int main()
{
all=1<<17;
int n=read(),m=read();
for(int i=1;i<=m;i++){q[i]={read(),read(),read(),read(),0};if(q[i].op==2)q[i].id=++qnum;else q[i].c=all-q[i].c,V.push_back(q[i].c);}
sort(V.begin(),V.end());V.erase(unique(V.begin(),V.end()),V.end());
sol(1,N=V.size(),1,m);
for(int i=1;i<=qnum;i++)printf("%lld\n",all-V[Res[i]-1]);
}
好多输出都是1,奇怪,求助