Pagini recente » Cod sursa (job #2675334) | Cod sursa (job #1659713) | Cod sursa (job #244369) | Cod sursa (job #1663903) | Cod sursa (job #2509672)
#include <fstream>
#define NM 100006
using namespace std;
ifstream f("hotel.in");
ofstream g("hotel.out");
int A,B,n,p,c;
struct {
int lf,rg,act,nr;
}a[4*NM];
void update( int nod,int st,int dr ){
int mijl,lch,rch;
if(A<=st&&dr<=B){
if(c==2) a[nod].lf=a[nod].rg=a[nod].nr=(dr-st+1);
else a[nod].lf=a[nod].rg=a[nod].nr=0;
a[nod].act=1;
return;
}
mijl=(st+dr)/2;
lch=2*nod; rch=2*nod+1;
if(a[nod].act==1){
a[nod].act=0;
if(a[nod].nr!=0){
int val;
val=mijl-st+1; a[lch].lf=a[lch].rg=a[lch].nr=mijl-st+1;
val=dr-mijl; a[rch].lf=a[rch].rg=a[rch].nr=dr-mijl;
a[lch].act=a[rch].act=1;
} else { a[lch].lf=a[lch].rg=a[lch].nr=0; a[rch].lf=a[rch].rg=a[rch].nr=0;
a[lch].act=a[rch].act=1;
}
}
if(A<=mijl) update(lch,st,mijl);
if(B>mijl) update(rch,mijl+1,dr);
lch=2*nod; rch=2*nod+1;
a[nod].nr=max(a[lch].nr,a[rch].nr); a[nod].nr=max(a[nod].nr,a[lch].rg+a[rch].lf);
a[nod].lf=a[lch].lf;
if(a[lch].lf==mijl-st+1) a[nod].lf+=a[rch].lf;
a[nod].rg=a[rch].rg;
if(a[rch].rg==dr-mijl) a[nod].rg+=a[lch].rg;
}
int main()
{
f>>n>>p; //g<<n<<' ';
c=2; A=1; B=n;
update(1,1,n);
while(p!=0){ p--;
f>>c;
if(c==3) g<<max(max(a[1].lf,a[1].rg),a[1].nr)<<'\n';
else { f>>A>>B; B=A+B-1; update(1,1,n); }
}
return 0;
}