#include<stdio.h>#include<string.h>#define maxn 50002int sum[4*maxn],lsum[maxn*4],rsum[maxn*4];int col[maxn*4];void buildtree(int l,int r,int rt){ col[rt]=-1; lsum[rt]=rsum[rt]=sum[rt]=r-l+1; if(l==r) return ; int mid=(l+r)>>1; buildtree(l,mid,rt<<1); buildtree(mid+1,r,rt<<1|1);}void pushdown(int rt,int k)//标记{ if(col[rt]!=-1) { col[rt<<1]=col[rt<<1|1]=col[rt]; lsum[rt<<1]=rsum[rt<<1]=sum[rt<<1]=col[rt]?0:(k-(k>>1)); lsum[rt<<1|1]=rsum[rt<<1|1]=sum[rt<<1|1]=col[rt]?0:(k>>1); col[rt]=-1; }}int query(int w,int l,int r,int rt){ if(l==r) return 1; pushdown(rt,r-l+1); int mid=(l+r)>>1; if(sum[rt<<1]>=w) return query(w,l,mid,rt<<1); else if(rsum[rt<<1]+lsum[rt<<1|1]>=w) return mid-rsum[rt<<1]+1; else return query(w,mid+1,r,rt<<1|1);}int MAX(int a,int b){ return a>b?a:b;}void pushup(int rt,int k){ lsum[rt]=lsum[rt<<1]; //左区间左部分。 rsum[rt]=rsum[rt<<1|1]; //右区间右部分。 if(lsum[rt]==k-(k>>1)) lsum[rt]+=lsum[rt<<1|1]; if(rsum[rt]==k>>1) rsum[rt]+=rsum[rt<<1]; sum[rt]=MAX(rsum[rt<<1]+lsum[rt<<1|1],MAX(sum[rt<<1],sum[rt<<1|1]));}void updata(int L,int R,int c,int l,int r,int rt){ if(L<=l&&r<=R) { lsum[rt]=rsum[rt]=sum[rt]=c?0:r-l+1; col[rt]=c; return ; } pushdown(rt,r-l+1); int mid=(l+r)>>1; if(L<=mid) updata(L,R,c,l,mid,rt<<1); if(R>mid) updata(L,R,c,mid+1,r,rt<<1|1); pushup(rt,r-l+1);}int main(){ freopen("Input.txt","r",stdin); int n,m,k,b,h; while(scanf("%d%d",&n,&m)!=EOF) { buildtree(1,n,1); for(int i=1;i<=m;i++) { scanf("%d",&k); if(k==1) { scanf("%d",&b); if(sum[1]<b){ printf("0\n");continue;} int y=query(b,1,n,1); printf("%d\n",y); updata(y,y+b-1,1,1,n,1); } else if(k==2) { scanf("%d%d",&b,&h); updata(b,b+h-1,0,1,n,1); } } } return 0;}