Pagini recente » Cod sursa (job #2793173) | Cod sursa (job #1450450) | Cod sursa (job #466808) | Cod sursa (job #617719) | Cod sursa (job #1445986)
#include<fstream>
#include<iostream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int NMAX = 100005;
const int LMAX = 18;
int P[LMAX][NMAX],n,lg[NMAX],m;
void read()
{
in>>n>>m;
for(int i = 1 ; i <= n ; ++i)
in>>P[0][i];
lg[1] = 0;
for(int i = 2 ; i <= n ; ++i)
lg[i] = lg[i/2] + 1;
}
void rmq()
{
for(int i = 1 ; (1 << i) <= n ; ++i)
for(int j = 1 ; j <= n - (1 << i) + 1 ; ++j)
P[i][j] = min(P[i-1][j],P[i-1][j + (1 << (i-1))]);
}
int query(int x,int y)
{
int len = y - x + 1;
int k = lg[len];
int diff = len - (1<<k);
return min(P[k][x],P[k][x + diff]);
}
int main()
{
read();
rmq();
int a,b;
for( ; m ; --m){
in>>a>>b;
out<<query(a,b)<<"\n";
}
return 0;
}