Pagini recente » Cod sursa (job #1979427) | Cod sursa (job #2122283) | Cod sursa (job #2608985) | Cod sursa (job #1761986) | Cod sursa (job #2058899)
#include <bits/stdc++.h>
using namespace std;
int n,q,ce,in,lu,tot[400010],le[400010],ri[400010];
void build(int node,int st,int dr)
{
tot[node]=le[node]=ri[node]=dr-st+1;
if(st==dr)return ;
int mid=(st+dr)/2;
build(node*2,st,mid);
build(node*2+1,mid+1,dr);
}
void update(int node,int l,int r,int ll,int rr,int val)
{
if(l>rr||r<ll)return ;
if(ll<=l&&r<=rr)
{
tot[node]=le[node]=ri[node]=(r-l+1)*val;
return ;
}
int mid=(l+r)/2;
if(tot[node]==0)tot[node*2]=tot[node*2+1]=le[node*2]=le[node*2+1]=ri[node*2]=ri[node*2+1]=0;
if(tot[node]==r-l+1)
{
tot[node*2]=le[node*2]=ri[node*2]=mid-l+1;
tot[node*2+1]=le[node*2+1]=ri[node*2+1]=r-mid;
}
update(node*2,l,mid,ll,rr,val);
update(node*2+1,mid+1,r,ll,rr,val);
le[node]=le[node*2];
if(le[node*2]==mid-l+1)le[node]+=le[node*2+1];
ri[node]=ri[node*2+1];
if(ri[node*2+1]==r-mid)ri[node]+=ri[node*2];
tot[node]=max(max(tot[node*2],tot[node*2+1]),ri[node*2]+le[node*2+1]);
}
int main()
{
ifstream cin ("hotel.in");
ofstream cout ("hotel.out");
cin>>n>>q;
build(1,1,n);
while(q--)
{
cin>>ce;
if(ce==1||ce==2)
{
cin>>in>>lu;
update(1,1,n,in,in+lu-1,ce-1);
}
else cout<<tot[1]<<'\n';
}
return 0;
}