Pagini recente » Diferente pentru fmi-no-stress-9/solutii intre reviziile 51 si 52 | Statistici Prelipcean Tudor-Ioan (Tudor-Ioan) | Statistici Badea Andrada Georgiana (AndradaBadea) | Monitorul de evaluare | Cod sursa (job #2510102)
#include <iostream>
#include <fstream>
using namespace std;
ifstream x("hotel.in");
ofstream y("hotel.out");
int a,b,n,m,val,i;
struct elem
{
int st,dr,sol,t;
}v[4*100002+200];
int maxi(int a, int b, int c)
{
if(a>b && a>c)
return a;
else
if(b>a && b>c)
return b;
else
if(c>a && c>b)
return c;
}
void update(int nod, int left, int right)
{
if(left>=a && right<=b)
{
if(val==1)
v[nod].st=v[nod].dr=v[nod].sol=0;
else
v[nod].st=v[nod].dr=v[nod].sol=right-left+1;
v[nod].t=1;
return;
}
int mij=(left+right)/2;
if(v[nod].t==1)
{
if(v[nod].sol==0)
{
v[2*nod].sol=v[2*nod].st=v[2*nod].dr=0;
v[2*nod+1].sol=v[2*nod+1].st=v[2*nod+1].dr=0;
}
else
{
v[2*nod].sol=v[2*nod].st=v[2*nod].dr=mij-left+1;
v[2*nod+1].sol=v[2*nod+1].st=v[2*nod+1].dr=right-mij;
}
v[2*nod].t=v[2*nod+1].t=1;
v[nod].t=0;
}
if(a<=mij)
update(2*nod,left,mij);
if(b>mij)
update(nod*2+1,mij+1,right);
v[nod].sol=maxi(v[2*nod].sol,v[2*nod+1].sol,v[2*nod].dr+v[2*nod+1].st);
if(v[2*nod].st==mij-left+1)
v[nod].st=v[2*nod].st+v[2*nod+1].st;
else
v[nod].st=v[2*nod].st;
if(v[2*nod+1].dr==right-mij)
v[nod].dr=v[2*nod].dr+v[2*nod+1].dr;
else
v[nod].dr=v[2*nod+1].dr;
}
int main()
{
x>>n>>m;
a=1;
b=n;
val=2;
update(1,1,n);
for(i=1;i<=m;i++)
{
x>>val;
if(val==1)
{
x>>a>>b;
b=a+b-1;
update(1,1,n);
}
else
{
if(val==2)
{
x>>a>>b;
b=a+b-1;
update(1,1,n);
}
else
y<<v[1].sol<<'\n';
}
}
x.close();
y.close();
return 0;
}