Pagini recente » Cod sursa (job #2162240) | Cod sursa (job #2659206) | Cod sursa (job #2758204) | Cod sursa (job #2846004) | Cod sursa (job #1076270)
#include <cstdio>
#define dim 262145
using namespace std;
int ll[dim],lm[dim],lr[dim],v,st,sf,n,m,i,k;
int maxim2(int a, int b)
{if(a>b){return a;}else{return b;}}
int maxim3(int a, int b, int c)
{return maxim2(maxim2(a,b),c);}
void query(){}
void update(int nod, int left, int right)
{
if(left==right){ll[nod]=v;lm[nod]=v;lr[nod]=v;}
else{
int mid=(left+right)/2;
if(st<=mid){update(nod*2,left,mid);}
if(mid<sf){update(nod*2+1,mid+1,right);}
lm[nod]=maxim3(lm[nod*2],lm[nod*2+1],lr[nod*2]+ll[nod*2+1]);//find lm
if(lm[nod*2]==mid-left+1){ll[nod]=lm[nod*2]+ll[nod*2+1];} //find llcombined
else{ll[nod]=ll[nod*2];} //find ll
if(lm[nod*2+1]==right-mid){lr[nod]=lm[nod*2+1]+lr[nod*2];}//find lrcombined
else{lr[nod]=lr[nod*2+1];} //find lr
}
}
int main()
{
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
scanf("%d%d",&n,&m);
st=1;sf=n;v=1;update(1,1,n);
for(i=1;i<=m;i++){
scanf("%d",&k);
if(k==3){printf("%d\n",lm[1]);}
else{scanf("%d%d",&st,&v);sf=st+v-1;v=(k==2);update(1,1,n);}
}
return 0;
}