Pagini recente » Cod sursa (job #1650624) | Cod sursa (job #390733) | Cod sursa (job #2483757) | Cod sursa (job #2911985) | Cod sursa (job #792955)
Cod sursa(job #792955)
#include<fstream>
#include<algorithm>
using namespace std;
int i,j,n,m,arb[300001],s[300001],d[300001],tip,a,b,val,poz;
void build(int nod,int st,int dr)
{
int mij;
if(st==dr)
{
arb[nod]=d[nod]=s[nod]=1;
return ;
}
else
{
mij=(st+dr)/2;
if(poz<=mij)
build(nod*2,st,mij);
else
build(nod*2+1,mij+1,dr);
arb[nod]=s[nod]=d[nod]=arb[nod*2]+arb[nod*2+1];
}
}
void update(int nod,int st,int dr)
{
int p,mij;
if(st>=a&&b>=dr)
{
if(tip==2)
p=dr-st+1;
else
p=0;
arb[nod]=s[nod]=d[nod]=p;
return ;
}
else
{
mij=(st+dr)/2;
if(!arb[nod])
{
arb[nod*2]=s[nod*2]=d[nod*2]=0;
arb[nod*2+1]=s[nod*2+1]=d[nod*2+1]=0;
}
if(arb[nod]==dr-st+1)
{
arb[nod*2]=s[nod*2]=d[nod*2]=mij-st+1;
arb[nod*2+1]=s[nod*2+1]=d[nod*2+1]=dr-mij;
}
if(a<=mij)
update(nod*2,st,mij);
if(mij<b)
update(nod*2+1,mij+1,dr);
arb[nod]=max(arb[nod*2],max(arb[nod*2+1],d[nod*2]+s[nod*2+1]));
if(s[nod*2]<mij-st+1)
s[nod]=s[nod*2];
else
s[nod]=s[nod*2]+s[nod*2+1];
if(d[nod*2+1]<dr-mij)
d[nod]=d[nod*2+1];
else
d[nod]=d[nod*2]+d[nod*2+1];
}
}
int main()
{
ifstream f("hotel.in");
ofstream g("hotel.out");
f>>n>>m;
for(i=1;i<=n;++i)
{
poz=i;
build(1,1,n);
}
for(i=1;i<=m;++i)
{
f>>tip;
if(tip==3)
g<<arb[1]<<"\n";
else
{
f>>a>>b;
b+=(a-1);
update(1,1,n);
}
}
return 0;
}