只过了第一个点
#include<bits/stdc++.h>
#define MAXN 500005
#define INF 100000000
#define int long long
#define lson(x) ((x)*2)
#define rson(x) ((x)*2+1)
#define Pair pair<pair<int, int>, pair<int, int> >
#define L(x) (x.first.first)
#define R(x) (x.first.second)
#define B(x) (x.second.first)
#define E(x) (x.second.second)
#define MP(_x,x_,__x,x__) (make_pair(make_pair(_x,x_),make_pair(__x,x__)))
using namespace std;
Pair a[MAXN*4];
Pair now;
int lazy[MAXN*4];
Pair merge(Pair _x,Pair x_){
Pair ans=MP(0ll,0ll,0ll,0ll);
if(L(_x))L(ans)=max(L(_x),L(ans));
if(B(_x))L(ans)=max(B(_x)+L(_x),L(ans));
if(R(x_))R(ans)=max(R(x_),R(ans));
if(B(x_))R(ans)=max(B(x_)+R(_x),R(ans));
if(B(_x)&&B(x_))B(ans)=B(x_)+B(_x);
E(ans)=max(E(_x),E(x_));
if(R(_x)&&L(x_))E(ans)=max(E(ans),R(_x)+L(x_));
return ans;
}
void pushdown(int x,int y,int p){
int mid=(x+y)>>1;
if(lazy[p]==1){
lazy[lson(p)]=1;a[lson(p)]=MP(mid-x+1,mid-x+1,mid-x+1,mid-x+1);
lazy[rson(p)]=1;a[rson(p)]=MP(y-mid,y-mid,y-mid,y-mid);
lazy[p]=-1;
}
else if(lazy[p]==0){
lazy[lson(p)]=0;a[lson(p)]=MP(0,0,0,0);
lazy[rson(p)]=0;a[rson(p)]=MP(0,0,0,0);
lazy[p]=-1;
}
}
int query(int l,int r,int p,int X){
pushdown(l,r,p);
if(l==r)return l;
int mid=(l+r)>>1;
if(E(a[lson(p)])>=X)return query(l,mid,lson(p),X);
else if(R(a[lson(p)])+L(a[rson(p)])>=X)return mid-R(a[lson(p)])+1;
else if(E(a[rson(p)])>=X)return query(mid+1,r,rson(p),X);
else return 0;
}
void modify(int x,int y,int l,int r,int val,int p){
if(l<=x&&r>=y){
if(val==1){
lazy[p]=1;
a[p]=MP(y-x+1,y-x+1,y-x+1,y-x+1);
}
if(val==0){
lazy[p]=0;
a[p]=MP(0,0,0,0);
}
return;
}
pushdown(x,y,p);
int mid=(x+y)>>1;
if(l<=mid)modify(x,mid,l,r,val,lson(p));
if(r>mid)modify(mid+1,y,l,r,val,rson(p));
a[p]=merge(a[lson(p)],a[rson(p)]);
}
void build(int l,int r,int p){
if(l==r){
a[p]=MP(1,1,1,1);
return;
}
int mid=(l+r)>>1;
build(l,mid,lson(p));
build(mid+1,r,rson(p));
a[p]=merge(a[lson(p)],a[rson(p)]);
return;
}
int n,m;
signed main()
{
cin>>n>>m;
memset(lazy,-1,sizeof(lazy));
build(1,n,1);
int op,x,y;
while(m--){
scanf("%lld%lld",&op,&x);
if(op==1){
int left=query(1,n,1,x);
printf("%lld\n",left);
if(left)modify(1,n,left,left+x-1,0,1);
}
if(op==2){
scanf("%lld",&y);
modify(1,n,x,x+y-1,1,1);
}
}
}