Pagini recente » Cod sursa (job #807661) | Cod sursa (job #3202301) | Cod sursa (job #2975125) | Cod sursa (job #662560) | Cod sursa (job #2394917)
#include <fstream>
using namespace std;
ifstream in("hotel.in");
ofstream out("hotel.out");
int l,r,st,dr,n,p,val,op;
struct nume
{
int gol,s,d,down;
}v[300003];
void update(int nod,int l,int r)
{
if(l>=st&&r<=dr)
{
if(val==1)
v[nod].s=v[nod].d=v[nod].gol=0;
else
v[nod].s=v[nod].d=v[nod].gol=r-l+1;
v[nod].down=1;
return;
}
int mij=(l+r)/2;
if(v[nod].down==1)
{
if(v[nod].gol==0)
{
v[2*nod].gol=v[2*nod].s=v[2*nod].d=0;
v[2*nod+1].gol=v[2*nod+1].s=v[2*nod+1].d=0;
}
else
{
v[2*nod].gol=v[2*nod].s=v[2*nod].d=mij-l+1;
v[2*nod+1].gol=v[2*nod+1].s=v[2*nod+1].d=r-mij;
}
v[2*nod].down=v[2*nod+1].down=1;
v[nod].down=0;
}
if(st<=mij)
update(2*nod,l,mij);
if(mij<dr)
update(2*nod+1,mij+1,r);
v[nod].gol=max(max(v[2*nod].gol,v[2*nod+1].gol),v[2*nod].d+v[2*nod+1].s);
v[nod].s=v[2*nod].s;
if(v[2*nod].s==mij-l+1)
v[nod].s+=v[2*nod+1].s;
v[nod].d=v[2*nod+1].d;
if(v[2*nod+1].d==r-mij)
v[nod].d+=v[2*nod].d;
}
void solve()
{
in>>n>>p;
st=1;
dr=n;
val=2;
update(1,1,n);
for(int i=1;i<=p;i++)
{
in>>op;
if(op==1)
{
in>>st>>dr;
dr=st+dr-1;
val=1;
update(1,1,n);
}
else
{
if(op==2)
{
in>>st>>dr;
dr=st+dr-1;
val=0;
update(1,1,n);
}
else
{
out<<v[1].gol<<"\n";
}
}
}
}
int main()
{
solve();
return 0;
}