#include<cstdio> #include<algorithm> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define ls rt<<1 #define rs ls|1 const int maxn=50010; int sumL[maxn<<2],sumR[maxn<<2],sumM[maxn<<2],col[maxn<<2]; void up(int l,int r,int rt) { int m=(r-l+1); sumL[rt]=sumL[ls]; sumR[rt]=sumR[rs]; if(sumL[ls]==m-m/2)sumL[rt]+=sumL[rs]; if(sumR[rs]==m/2)sumR[rt]+=sumR[ls]; sumM[rt]=max(sumL[rs]+sumR[ls],max(sumM[ls],sumM[rs])); } void down(int l,int r,int rt) { int m=(r-l+1); if(col[rt]!=-1) { sumL[ls]=sumR[ls]=sumM[ls]=col[rt]?m-m/2:0; sumL[rs]=sumR[rs]=sumM[rs]=col[rt]?m/2:0; col[ls]=col[rs]=col[rt]; col[rt]=-1; } } void build(int l,int r,int rt) { col[rt]=-1; sumR[rt]=sumL[rt]=sumM[rt]=r-l+1; if(l==r)return; int m=(l+r)/2; build(lson); build(rson); } void update(int L,int R,int key,int l,int r,int rt) { if(L<=l&&r<=R) { col[rt]=key; sumL[rt]=sumR[rt]=sumM[rt]=col[rt]?r-l+1:0; return; } down(l,r,rt); int m=(l+r)/2; if(L<=m)update(L,R,key,lson); if(m<R)update(L,R,key,rson); up(l,r,rt); } int query(int tol,int l,int r,int rt) { if(l==r)return l; down(l,r,rt); int m=(l+r)/2; if(sumM[ls]>=tol)return query(tol,lson); else if(sumL[rs]+sumR[ls]>=tol)return m-sumR[ls]+1; else return query(tol,rson); } int main() { int n,m,op,tol,L,R,d; while(scanf("%d%d",&n,&m)!=EOF) { build(1,n,1); while(m--) { scanf("%d",&op); if(op==1) { scanf("%d",&tol); if(sumM[1]<tol) { printf("0\n"); continue; } L=query(tol,1,n,1); printf("%d\n",L); R=L+tol-1; update(L,R,0,1,n,1); } else { scanf("%d%d",&L,&d); R=L+d-1; update(L,R,1,1,n,1); } } } }