Pagini recente » Cod sursa (job #642694) | Cod sursa (job #1336371) | Cod sursa (job #1404040) | Cod sursa (job #247755) | Cod sursa (job #1070268)
#include <algorithm>
#include <fstream>
using namespace std;
const int N=200005;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
int x, y;
int a[3*N], b[3*N], c[3*N], d[3*N];
void update(int nod, int l, int r, int val)
{
if(x<=l&&r<=y)
{
a[nod]=b[nod]=c[nod]=val*(r-l+1);
return;
}
int mij=(l+r)/2;
if(c[nod]==0)
{
c[2*nod]=a[2*nod]=b[2*nod]=0;
c[2*nod+1]=a[2*nod+1]=b[2*nod+1]=0;
}
else if(c[nod]==r-l+1)
{
c[2*nod]=a[2*nod]=b[2*nod]=mij-l+1;
c[2*nod+1]=a[2*nod+1]=b[2*nod+1]=r-mij;
}
if(x<=mij) update(2*nod, l, mij, val);
if(y>mij) update(2*nod+1, mij+1, r, val);
if(a[2*nod]==mij-l+1) a[nod]=a[2*nod]+a[2*nod+1];
else a[nod]=a[2*nod];
if(b[2*nod+1]==r-mij) b[nod]=b[2*nod+1]+b[2*nod];
else b[nod]=b[2*nod+1];
c[nod]=max(max(b[2*nod]+a[2*nod+1], max(c[2*nod], c[2*nod+1])), max(a[nod], b[nod]));
}
int main()
{
int n, m, i;
fin>>n>>m;
x=1;
y=n;
update(1, 1, n, 1);
while(m--)
{
fin>>i;
if(i==3) fout<<c[1]<<"\n";
else if(i==1)
{
fin>>x>>y;
y+=x-1;
update(1, 1, n, 0);
}
else
{
fin>>x>>y;
y+=x-1;
update(1, 1, n, 1);
}
}
fin.close();
fout.close();
}