Pagini recente » Cod sursa (job #2314429) | Cod sursa (job #611273) | Cod sursa (job #3290829) | Cod sursa (job #845809) | Cod sursa (job #2184991)
#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n, m, a, b, p;
int arr[100005];
int d[18][100005];
int putere[100005];
int main()
{
in>>n>>m;
for( int i = 1; i <= n; i++ )
in>>arr[i];
putere[1] = 0;
for( int i = 2; i <= n; i++ )
putere[i] = 1 + putere[i/2];
for( int i = 1; i <= n; i++ )
d[0][i] = arr[i];
for( int i = 1; (1<<i) <= n; i++ )
for( int j = 1; j <= n; j++ )
if( j + (1<<i) - 1 <= n )
d[i][j] = min( d[i - 1][j], d[i - 1][ j + (1<<(i-1))] );
else
d[i][j] = d[i - 1][j];
for( int i = 1; i <= m; i++ )
{
in>>a>>b;
p = putere[ b - a + 1 ];
out<<min( d[p][a], d[p][ b - (1<<p) + 1 ] )<<"\n";
}
}