Pagini recente » Cod sursa (job #239888) | Cod sursa (job #2440096) | Cod sursa (job #2449682) | Cod sursa (job #1030494) | Cod sursa (job #530757)
Cod sursa(job #530757)
#include<stdio.h>
#define Nmax 100010
struct nnod { int s,d,x; } A[Nmax<<2];
int op , a , b , i , n , m ;
void init ( int nod , int s, int d )
{
if( s == d )
{
A[nod].s = s ;
A[nod].d = d;
A[nod].x = 1 ;
return ;
}
int m = ( s + d ) >> 1;
int st = nod<<1;
int dr = 1 + (nod<<1);
init( st , s , m ) ;
init( dr , m+1 , d );
A[nod].s = d ; A[nod].d = s ;
A[nod].x = d - s + 1 ;
}
void update ( int nod, int s, int d, int op )
{
if ( a <= s && d <= b )
{
if(op == 1)
{
A[nod].x = 0 ; A[nod].s = s-1; A[nod].d = d+1;
}
else
{
A[nod].x = d-s+1; A[nod].s = d ; A[nod].d = s ;
}
return ;
}
int m = ( s + d ) >> 1 ;
int st = nod<<1;
int dr = 1 + (nod<<1);
if( A[nod].x == d-s+1 )
{
A[st].x = m-s+1; A[st].s = m ; A[st].d = s ;
A[dr].x = d-m ; A[dr].s = d ; A[dr].d = m+1 ;
}
else if( A[nod].x == 0 )
{
A[st].x = 0 ; A[st].s = s-1 ; A[st].d = m+1 ;
A[dr].x = 0 ; A[dr].s = m ; A[dr].d = d+1 ;
}
if( a <= m ) update(st,s,m,op);
if( m < b ) update(dr,m+1,d,op);
if( ( A[st].x == m-s+1 ) && ( A[dr].x == d-m ) )
{
A[nod].s = d ; A[nod].d = s ;
}
else if( A[st].x == m-s+1 )
{
A[nod].s = A[dr].s ; A[nod].d = A[dr].d ;
}
else if( A[dr].x == d-m )
{
A[nod].s = A[st].s ; A[nod].d = A[st].d ;
}
else
{
A[nod].s = A[st].s ; A[nod].d = A[dr].d ;
}
A[nod].x = A[dr].s - A[st].d + 1 ;
if( A[st]. x > A[nod].x ) A[nod].x = A[st].x;
if( A[dr]. x > A[nod].x ) A[nod].x = A[dr].x;
}
int main()
{
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
scanf("%d %d",&n,&m);
init(1,1,n) ;
for( i = 1 ; i <= m ; i++ )
{
scanf("%d",&op);
if( op < 3 )
{
scanf("%d %d",&a,&b);
b = a + b - 1 ;
update(1,1,n,op);
}
else
printf("%d\n",A[1].x);
}
return 0;
}