Pagini recente » Cod sursa (job #897094) | Cod sursa (job #2924119) | Cod sursa (job #1548875) | Cod sursa (job #2552538) | Cod sursa (job #2510581)
#include<fstream>
#define nmax 130005
using namespace std;
ifstream f ("hotel.in");
ofstream g ("hotel.out");
struct ele
{
int sol,st,dr;
};
ele v[4*nmax];
int i,j,a,b,cati,cerinta,valoare,mij,n,p,lg,pozitie;
void update(int nod,int st,int dr)
{
if(st==dr)
{
v[nod].sol=valoare;
v[nod].dr=valoare;
v[nod].st=valoare;
return;
}
int mij=(st+dr)/2;
if(pozitie<=mij)
update(2*nod,st,mij);
else
update(2*nod+1,mij+1,dr);
v[nod].st=v[nod*2].st;
v[nod].dr=v[nod*2+1].dr;
v[nod].sol=v[nod*2].dr+v[nod*2+1].st;
if(v[nod*2].sol>v[nod].sol)
v[nod].sol=v[nod*2].sol;
if(v[nod*2+1].sol>v[nod].sol)
v[nod].sol=v[nod*2+1].sol;
if(v[2*nod].st==mij-st+1)
v[nod].st+=v[2*nod+1].st;
if(v[2*nod+1].dr==dr-mij)
v[nod].dr+=v[2*nod].dr;
}
int main()
{
f>>n>>p;
valoare=1;
for(i=1;i<=n;i++)
{
valoare=1;
pozitie=i;
update(1,1,n);
}
while(p)
{
p--;
f>>cerinta;
if(cerinta==1)
{
f>>a>>b;
b=a+b-1;
for(j=a;j<=b;j++)
{
pozitie=j;
valoare=0;
update(1,1,n);
}
}
if(cerinta==2)
{
f>>a>>b;
b=a+b-1;
for(j=a;j<=b;j++)
{
pozitie=j;
valoare=1;
update(1,1,n);
}
}
if(cerinta==3)
g<<v[1].sol<<endl;
}
}