Pagini recente » Cod sursa (job #21959) | Cod sursa (job #1268722) | Cod sursa (job #3233158) | Cod sursa (job #2943851) | Cod sursa (job #2068422)
#include <fstream>
using namespace std;
ifstream cin ("hotel.in");
ofstream cout ("hotel.out");
int n,m,beg[300100],endd[300100],l[300100],lt,rt,p;
void up_date (int st,int dr,int nod)
{
if(lt<=st && dr<=rt)
beg[nod]=endd[nod]=l[nod]=(dr-st+1)*(p-1);
else
{
int mij=(st+dr)/2;
if(dr-st+1==l[nod]) beg[nod*2]=endd[nod*2]=l[nod*2]=mij-st+1,beg[nod*2+1]=endd[nod*2+1]=l[nod*2+1]=dr-mij;
if(l[nod]==0) beg[nod*2]=endd[nod*2]=l[nod*2]=0,beg[nod*2+1]=endd[nod*2+1]=l[nod*2+1]=0;
if(lt<=mij) up_date(st,mij,nod*2);
if(rt>mij) up_date(mij+1,dr,nod*2+1);
beg[nod]=beg[nod*2]; if(beg[nod*2]==mij-st+1) beg[nod]+=beg[nod*2+1];
endd[nod]=endd[nod*2+1]; if(endd[nod*2+1]==dr-mij) endd[nod]+=endd[nod*2];
l[nod]=max(beg[nod],endd[nod]);
l[nod]=max(l[nod],l[nod*2]);
l[nod]=max(l[nod],l[nod*2+1]);
l[nod]=max(l[nod],endd[nod*2]+beg[nod*2+1]);
}
}
void read ()
{ cin>>n>>m;
p=2; lt=1; rt=n; up_date(1,n,1);
for(int i=1;i<=m;i++)
{
cin>>p;
if(p==3) cout<<l[1]<<"\n"; else
{
cin>>lt>>rt;
rt=lt+rt-1;
up_date(1,n,1);
}
}
}
int main()
{
read();
cin.close();
cout.close();
return 0;
}