Pagini recente » Cod sursa (job #1759583) | Cod sursa (job #518213) | Cod sursa (job #146013) | Cod sursa (job #1780458) | Cod sursa (job #3160513)
#include <fstream>
using namespace std;
ifstream f("hotel.in");
ofstream g("hotel.out");
int n,p,x,y,val;
int aib[800001],r[800001],l[800001],lazy[800001];
void constructie(int st,int dr,int nod)
{
aib[nod]=dr-st+1;
r[nod]=st;
l[nod]=dr;
if(st==dr)
return;
int mij=(st+dr)/2;
constructie(st,mij,nod*2);
constructie(mij+1,dr,nod*2+1);
}
void update(int st,int dr,int nod)
{
if(st>y || dr<x)
return;
if(lazy[nod]!=0)
{
if(lazy[nod]==1)
{
aib[nod]=0;
r[nod]=dr+1;
l[nod]=st-1;
lazy[nod*2]=1;
int mij=(dr+st)/2;
l[nod*2]=st-1;
r[nod*2]=mij+1;
lazy[nod*2+1]=1;
l[nod*2+1]=mij;
r[nod*2+1]=dr+1;
}
else
{
aib[nod]=dr-st+1;
r[nod]=st;
l[nod]=dr;
lazy[nod*2]=-1;
int mij=(st+dr)/2;
l[nod*2]=mij;
r[nod*2]=st;
lazy[nod*2+1]=-1;
l[nod*2+1]=dr;
r[nod*2+1]=mij+1;
}
lazy[nod]=0;
}
if(st>=x && dr<=y)
{
if(val==-1)
{
aib[nod]=dr-st+1;
r[nod]=st;
l[nod]=dr;
lazy[nod*2]=-1;
lazy[nod*2+1]=-1;
}
else
{
aib[nod]=0;
r[nod]=dr+1;
l[nod]=st-1;
lazy[nod*2]=1;
lazy[nod*2+1]=1;
}
return;
}
int mij=(dr+st)/2;
update(st,mij,nod*2);
update(mij+1,dr,nod*2+1);
aib[nod]=max(aib[nod*2],aib[nod*2+1]);
aib[nod]=max(aib[nod],l[nod*2+1]-r[nod*2]+1);
if (aib[nod*2+1]==dr-mij)
r[nod]=r[nod*2];
else
r[nod]=r[nod*2+1];
if (aib[nod*2]==mij+1-st)
l[nod]=l[nod*2+1];
else
l[nod]=l[nod*2];
}
int main()
{
f>>n>>p;
constructie(1,n,1);
for(int q=1;q<=p;q++)
{
int c;
f>>c;
if(c==1)
{
f>>x>>y;
y+=x-1;
val=1;
update(1,n,1);
}
if(c==2)
{
f>>x>>y;
y+=x-1;
val=-1;
update(1,n,1);
}
if(c==3)
g<<aib[1]<<'\n';
}
return 0;
}