Pagini recente » Cod sursa (job #2955522) | Cod sursa (job #1516149) | Cod sursa (job #2245408) | Cod sursa (job #1191002) | Cod sursa (job #3155107)
#include <fstream>
#define MAX 100001
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int i, lg[MAX+1], j, n, x, v[MAX+1], y, a[MAX][100];
int pow( int baza, int exp ) {
if ( exp == 0 )
return 1;
if ( exp % 2 == 0 ) {
return pow( baza * baza, exp / 2 );
} else {
return pow( baza * baza, exp / 2 ) * baza;
}
}
int main()
{
int m;
cin >> n >> m;
for (i = 0; i < n; i++)
{
cin >> v[i];
a[i][0] = v[i];
}
lg[1] = 0;
for (i = 2; i <= MAX; i++)
lg[i] = lg[i/2]+1;
int p = 1;
for (j = 1; j <= lg[n]; j++)
{
p*=2;
for (i = 0; i < n - p+1; i++)
{
a[i][j] = min(a[i][j-1], a[i+pow(2, j-1)][j-1]);
}
}
for (i = 0; i < m; i++)
{
cin >> x >> y;
int len = y-x+1;
cout << min(a[x-1][lg[len]], a[y-pow(2,lg[len])][lg[len]]) << '\n';
}
return 0;
}
/*
int pow( int baza, int exp ) {
if ( exp == 0 )
return baza;
if ( exp % 2 == 0 ) {
return pow( baza * baza, exp / 2 );
} else {
return pow( baza * baza, exp / 2 ) * baza;
}
}
*/