Pagini recente » Cod sursa (job #1445023) | Cod sursa (job #1266973) | Cod sursa (job #1506832) | Cod sursa (job #1734203) | Cod sursa (job #2461916)
#include <fstream>
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
int n,m,i,a,b,c,val;
struct numar{
int nr,left,right;
}ai[300005];
void update(int nod, int st, int dr){
if(st==dr){
ai[nod].nr=ai[nod].left=ai[nod].right=val;
return;
}
int mid=(st+dr)/2;
if(mid>=a)
update(2*nod,st,mid);
if(mid<b)
update(2*nod+1,mid+1,dr);
if(ai[2*nod].right != 0 && ai[2*nod+1].left != 0)
ai[nod].nr = ai[2*nod].right + ai[2*nod+1].left;
else
ai[nod].nr = max(ai[2*nod].nr, ai[2*nod+1].nr);
ai[nod].left = ai[2*nod].left;
if(ai[2*nod].left == (dr-st+2)/2 && ai[2*nod+1].left != 0)
ai[nod].left += ai[2*nod+1].left;
ai[nod].right = ai[2*nod+1].right;
if(ai[2*nod+1].right == (dr-st+1)/2 && ai[2*nod].right !=0)
ai[nod].right += ai[2*nod].right;
}
int main(){
fin>>n>>m;
a=1, b=n, val=1;
update(1,1,n);
for(i=1;i<=m;i++){
fin>>c;
if(c==3){
int Max=ai[1].nr;
Max=max(Max, max(ai[1].left,ai[1].right));
fout<<Max<<'\n';
continue;
}
fin>>a>>b;
b=a+b-1;
if(c==1)
val=0;
else
val=1;
update(1,1,n);
}
return 0;
}