Pagini recente » Cod sursa (job #1923867) | Cod sursa (job #1843965) | Cod sursa (job #2593622) | Cod sursa (job #1182172) | Cod sursa (job #3152001)
#include <bits/stdc++.h>
#define MAXN 100000
#define LOGMAX 17
using namespace std;
ifstream fin( "rmq.in" );
ofstream fout( "rmq.out" );
int RMQ[LOGMAX][MAXN];
int p2[LOGMAX];
int lg2[MAXN + 1];
int v[MAXN];
int main(){
int N, M, i, k, st, dr, sol;
fin >> N >> M;
for( i = 0; i < N; i++ )
fin >> v[i], RMQ[0][i] = v[i];
p2[0] = 1;
for( i = 1; i < LOGMAX; i++ )
p2[i] = 2 * p2[i - 1];
lg2[1] = 0;
for( i = 2; i <= MAXN; i++ )
lg2[i] = lg2[i / 2] + 1;
for( k = 1; k <= lg2[N]; k++ ){
for( i = 0; i < N; i++ ){
RMQ[k][i] = RMQ[k - 1][i];
if( i + p2[k - 1] < N )
RMQ[k][i] = min( RMQ[k - 1][i], RMQ[k - 1][i + p2[k - 1]] );
}
}
for( i = 0; i < M; i++ ){
fin >> st >> dr;
st--, dr--;
sol = min( RMQ[lg2[dr - st + 1]][st], RMQ[lg2[dr - st + 1]][dr - p2[lg2[dr - st + 1]] + 1] );
fout << sol << '\n';
}
return 0;
}