Pagini recente » Cod sursa (job #2573536) | Cod sursa (job #315894) | Cod sursa (job #2952850) | Cod sursa (job #2254898) | Cod sursa (job #955591)
Cod sursa(job #955591)
#include<stdio.h>
#include<algorithm>
#define NMAX 100001
using namespace std;
int Arbi[NMAX * 3];
int x , y , a , poz , Ans , n , m;
void update(int nod , int st , int dr)
{
if(st == dr)
{
Arbi[nod] = a;
return ;
}
int med = (st + dr) >> 1;
if(med >= poz)
update(2 * nod , st , med);
else
update(2 * nod + 1 , med + 1 , dr);
Arbi[nod] = min(Arbi[nod * 2] , Arbi[nod * 2 + 1]);
}
void query(int nod , int st , int dr)
{
if(st >= x && dr <= y)
{
Ans = min(Ans , Arbi[nod]);
return ;
}
int med = (st + dr) >> 1;
if(x <= med)
query(2 * nod , st , med);
if(y > med)
query(2 * nod + 1 , med + 1 , dr);
}
int main()
{
freopen("rmq.in" , "r" , stdin);
freopen("rmq.out" , "w" , stdout);
scanf("%d %d" , &n , &m);
for(int i = 1 ; i <= n ; ++ i)
{
scanf("%d" , &a);
poz = i;
update(1 , 1 , n);
}
for(int i = 1 ; i <= m ; ++ i)
{
scanf("%d %d" , &x , &y);
Ans = 20000000;
query(1 , 1 , n);
printf("%d\n" , Ans);
}
return 0;
}