Pagini recente » Cod sursa (job #357227) | Cod sursa (job #220311) | Cod sursa (job #1483737) | Cod sursa (job #2600063) | Cod sursa (job #2510592)
#include<fstream>
#define nmax 100005
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;
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(a<=mij)
update(2*nod,st,mij);
if(b>mij)
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;
a=1,b=n;
update(1,1,n);
while(p)
{
p--;
f>>cerinta;
if(cerinta==1)
{
f>>a>>lg;
valoare=0;
b=a+lg-1;
update(1,1,n);
}
if(cerinta==2)
{
f>>a>>lg;
valoare=1;
b=a+lg-1;
update(1,1,n);
}
if(cerinta==3)
g<<v[1].sol<<'\n';
}
}