Pagini recente » Cod sursa (job #320810) | Monitorul de evaluare | Monitorul de evaluare | Borderou de evaluare (job #1225021) | Cod sursa (job #3348005)
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
const int NMAX=100001,
KMAX=17;
int N,T[KMAX][NMAX],lg2[NMAX];
ifstream f("rmq.in");
ofstream g("rmq.out");
//void afisT(){
// for(int i=0;(1<<i)<=N;i++){
// for(int j=1;j<=N;j++)
// cout << setw(3) << T[i][j];
// cout << '\n';
// }
//}
void buildSparseTable(){
for(int i=1;(1<<i)<=N;i++)
for(int j=1;j+(1<<i)-1<=N;j++)
T[i][j]=min(T[i-1][j],T[i-1][j+(1<<i-1)]);
}
int query(int x,int y){
int k=lg2[y-x+1];
return min(T[k][x],T[k][y-(1<<k)+1]);
}
int main()
{
int M,x,y;
f >> N >> M;
lg2[0]=-1;
for(int i=1;i<=N;i++){
f >> T[0][i];
lg2[i]=lg2[i>>1]+1;
}
lg2[0]=0;
//
buildSparseTable();
//afisT();
//
while(M--){
f >> x >> y;
g << query(x,y) << '\n';
}
return 0;
}