Pagini recente » Cod sursa (job #1273261) | Cod sursa (job #2033178) | Cod sursa (job #3222224) | Cod sursa (job #424324) | Cod sursa (job #773274)
Cod sursa(job #773274)
#include<cstdio>
#include<algorithm>
using namespace std;
struct node
{
int l_curr,l_left,l_right,l_max;
} tree[200020];
int n,p,n2,a,b,value,m;
void write()
{
for(int i=1;i<=2*n2-1;i++) printf("%d ",tree[i]);
printf("\n");
}
void update()
{
int node=n2-1+a,i,p;
for(i=node;i<=node+m-1;i++)
{
tree[i].l_curr=value; tree[i].l_left=value; tree[i].l_right=value;
}
for(i=n2-1;i>=1;--i)
{
p=tree[2*i].l_right+tree[2*i+1].l_left;
if(tree[2*i].l_max==tree[2*i].l_curr)
{
tree[i].l_left=tree[2*i].l_max+tree[2*i+1].l_left;
}
else tree[i].l_left=tree[2*i].l_left;
if(tree[2*i+1].l_max==tree[2*i+1].l_curr)
{
tree[i].l_right=tree[2*i+1].l_max+tree[2*i].l_right;
}
else tree[i].l_right=tree[2*i+1].l_right;
tree[i].l_curr=max(max(tree[i].l_right,tree[i].l_left),max(p,max(tree[2*i].l_curr,tree[2*i+1].l_curr)));
}
}
int main()
{
int i,q;
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
scanf("%d%d",&n,&p);
for(n2=1;n2<n;n2<<=1);
tree[1].l_max=n2; tree[1].l_curr=n;
for(i=2;i<=2*n2-1;i++) {tree[i].l_max=(tree[i/2].l_max)/2;}
for(i=n2;i<=n2+n-1;i++) {tree[i].l_curr=1; tree[i].l_left=1; tree[i].l_right=1;}
for(;p;--p)
{
scanf("%d",&q);
if(q==1) {scanf("%d%d",&i,&m); a=i; b=i+m-1; value=0; update();}
if(q==2) {scanf("%d%d",&i,&m); a=i; b=i+m-1; value=1; update();}
if(q==3) {printf("%d\n",tree[1].l_curr);}
}
return 0;
}