Pagini recente » Cod sursa (job #1185826) | Cod sursa (job #2118396) | Cod sursa (job #2520210) | Cod sursa (job #1537427) | Cod sursa (job #915970)
Cod sursa(job #915970)
#include<cstdio>
#include<iostream>
using namespace std;
#define MAX 100001
int N , M[MAX][20] , V[MAX] , K , log[MAX];
int main()
{
freopen("rmq.in" , "r" , stdin );
freopen("rmq.out" , "w" , stdout );
scanf("%d%d" , &N , &K);
for( int i = 1 ; i <=N ; ++i )
scanf("%d" , &V[i] );
for(int i = 2 ; i <= N ; ++i )
log[i] = log[i/2]+1;
for(int i = 1 ; i <= N ; ++i )
M[i][0] = i;
for(int j = 1 ; 1 <<j <= N ; ++j )
for( int i = 1 ; i + (1<<j)-1 <= N ; ++i )
if(V[M[i][j-1]] <= V[M[i+(1<<(j-1))][j-1]])
M[i][j] =M[i][j-1];
else
M[i][j] = M[i+(1<<(j-1))][j-1];
int x , y , dim ,k;
for( int i = 1 ; i <= K ; ++i )
{
scanf("%d%d" , &x , &y );
dim = y-x+1;
k = log[dim];
if(V[M[x][k]] < V[M[y-(1<<k)+1][k]])
printf("%d\n" ,V[M[x][k]]);
else
printf("%d\n" , V[M[y-(1<<k)+1][k]]);
}
}