Pagini recente » Cod sursa (job #2094631) | Cod sursa (job #1384908) | Cod sursa (job #34733) | Cod sursa (job #1830017) | Cod sursa (job #2567262)
#include <bits/stdc++.h>
#define Nmax 100002
#define inf 1 << 30
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int a[ Nmax ], n, m, poz, val, qs, qf ;
int aint[ 4 * Nmax ] ;
void update ( int s, int d, int p )
{
if( s == d )
{
//cout<<s<<" "<<val<<"\n";
aint [ p ] = val ;
return ;
}
int mid = ( s + d ) / 2 ;
if( poz <= mid )
update( s, mid, 2 * p );
else
update( mid + 1, d, 2 * p + 1 );
aint[ p ] = min( aint [ 2 * p ], aint [ 2 * p + 1 ]);
}
int query ( int s, int d, int p )
{
if( qs <= s && qf >= d )
{
//cout<<qs<<" "<<qf<<" "<<s<<" "<<d<<"\n";
return aint[ p ];
}
if( qs > d || qf < s )
return inf ;
int mid = ( s + d ) / 2 ;
return min ( query ( s, mid, 2 * p ), query( mid + 1, d, 2 * p + 1 ) ) ;
}
void citire( )
{
int i , j;
fin>>n>>m;
for( i = 1 ; i <= 4 * n ; i ++)
aint[ i ] = inf ;
for( i = 1 ; i <= n ; i++ )
{
fin>> val;
poz = i;
update( 1, n, 1 ) ;
}
for( i = 1 ; i <= m ; i++ )
{
fin >> qs >> qf ;
fout<<query( 1, n, 1 ) <<"\n";
}
}
int main()
{
citire();
return 0;
}