Pagini recente » Cod sursa (job #2572482) | Cod sursa (job #953190) | Cod sursa (job #627577) | Cod sursa (job #967812) | Cod sursa (job #387137)
Cod sursa(job #387137)
#include<stdio.h>
long n,p,m,pos,val,start,finish;
int c;
struct la
{
void init(long a)
{
lmax=lleft=lright=a;
}
long lmax,lleft,lright,st,dr;
}arb[400100];
inline long MAX(long a,long b)
{
if(a>=b)return a;
return b;
}
void init(long nod,long left,long right)
{
if(left==right)
{
arb[nod].init(1);//arb[nod].lmax1;
arb[nod].st=arb[nod].dr=left;
return;
}
long mid=(left+right)/2;
init(nod*2,left,mid);
init(nod*2+1,mid+1,right);
arb[nod].lmax=arb[nod].lleft=arb[nod].lright=arb[nod*2].lmax+arb[nod*2+1].lmax;
arb[nod].st=left;
arb[nod].dr=right;
}
void update(long nod,long left,long right)
{
if( start<=left && right<=finish )
{
arb[nod].init(val*(right-left+1));
return;
}
if(arb[nod].lmax==0)
{
arb[nod*2].init(0);
arb[nod*2+1].init(0);
}
else
if(arb[nod].lmax=arb[nod].dr-arb[nod].st+1)
{
arb[nod*2].init((arb[nod].dr+arb[nod].st)/2-arb[nod].st+1);
arb[nod*2+1].init(arb[nod].dr-(arb[nod].st+arb[nod].dr)/2);
}
long div=(left+right)/2;
if(start<=div)update(nod*2,left,div);
if(div<finish)update(nod*2+1,div+1,right);
arb[nod].lmax=MAX(MAX(arb[nod*2].lmax,arb[nod*2+1].lmax),arb[nod*2].lright+arb[nod*2+1].lleft);
arb[nod].lleft=arb[nod*2].lleft;
arb[nod].lright=arb[nod*2+1].lright;
int ok=0;
if(arb[nod].lmax==arb[nod].dr-arb[nod].st+1)
{arb[nod].lleft=arb[nod].lright=arb[nod].lmax;ok=1;}
if(!ok&&arb[nod*2+1].lmax==arb[nod*2+1].lright&&arb[nod*2+1].lmax==arb[nod*2+1].dr-arb[nod*2+1].st+1)
arb[nod].lright+=arb[nod*2].lright;
if(!ok&&arb[nod*2].lmax==arb[nod*2].lright&&arb[nod*2].lmax==arb[nod*2].dr-arb[nod*2].st+1)
arb[nod].lleft+=arb[nod*2+1].lleft;
}
int main()
{
FILE*f=fopen("hotel.in","r");
fscanf(f,"%ld %ld",&n,&p);
init(1,1,n);
FILE*g=fopen("hotel.out","w");
for(;p;--p)
{
fscanf(f,"%d",&c);
if(c!=3)
{
fscanf(f,"%ld %ld",&pos,&m);
val=(c-1);
start=pos;
finish=pos+m-1;
update(1,1,n);
}
else
{
fprintf(g,"%ld\n",arb[1].lmax);
}
}
fclose(f);
fclose(g);
return 0;
}