Pagini recente » Cod sursa (job #2488242) | Cod sursa (job #1991625) | Cod sursa (job #2694372) | Cod sursa (job #2731372) | Cod sursa (job #2050056)
#include <cstdio>
#include <queue>
using namespace std;
#define IN "arbint.in"
#define OUT "arbint.out"
int st[400003];
int INF = 83930212;
struct element
{
int val , st ,dr;
}v[800004];
bool Partial_Overlap(int x , int y , int a , int b)
{
if ( ( x <= b && x >= a ) or ( y <= b && y >= a ) or ( a <= y && a >= x ) or ( b >= x && b <= y ) )
return 1;
return 0;
}
bool Total_Overlap(int x , int y , int a , int b)
{
if ( x <= a && b <= y )
return 1;
return 0;
}
int n , m;
void Build()
{
int noduri , nr , i;
noduri = 2*n-1;
nr = 1;
v[1].st = 1 , v[1].dr = n;
for ( i = 1 ; i <= 4*n && nr < noduri ; i ++)
if(v[i].st != v[i].dr ){
v[i*2].st = v[i].st , v[i*2].dr = (v[i].st+v[i].dr)/2;
v[i*2+1].st = (v[i].st+v[i].dr)/2+1 , v[i*2+1].dr = v[i].dr , nr += 2;
}
for ( i = 1 ; i <= 4*n ; i ++ )
if ( v[i].st == 0 && v[i].dr == 0 )
v[i].st = v[i].dr = v[i].val = INF;
}
int main()
{
int i , vf , x , y , V , t;
freopen(IN,"r",stdin);
freopen(OUT,"w",stdout);
scanf ( "%d%d" , &n , &m );
for ( i = 1 ; i <= m ; i ++ ){
scanf ( "%d" , &V );
scanf ( "%d%d" , &x , &y );
if ( V == 1 )
{
vf = 1;
st[vf] = 1;
while( 1 == 1 )
{
t = st[vf];
vf--;
if (Partial_Overlap(v[t].st , v[t].dr , x , y))
st[++vf] = t*2 , st[++vf] = t*2+1;
else if (Total_Overlap(v[t].st , v[t].dr , x , y)){
vf = 1 , printf ( "%d\n" , v[t].val );
break;}
else
vf--;
}
}
}
}