Pagini recente » Cod sursa (job #393645) | Cod sursa (job #1385040) | Monitorul de evaluare | Cod sursa (job #1271421) | Cod sursa (job #2471776)
#include <iostream>
#include <fstream>
#define MAXN 100001
#define LOGMAXN 5
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int m[MAXN][LOGMAXN];
int a[MAXN],n;
void preprocess(){
for(int i=0;i<n;i++)
m[i][0]=i;
for(int j=1;1<<j<=n;j++){
for(int i=0;i+(1<<j)-1<n;i++){
if(a[m[i][j-1]]<a[m[i+(1<<(j-1))][j-1]])
m[i][j]=m[i][j-1];
else
m[i][j]=m[i+(1<<(j-1))][j-1];
}
}
}
int rmq(int x,int y){
int k=(int)log(y-x+1);
if(a[m[x][k]]<=a[m[y-(1<<k)+1][k]])
return m[x][k];
else
return m[y-(1<<k)+1][k];
}
int main(){
int nrq;
fin>>n>>nrq;
for(int i=0;i<n;i++){
fin>>a[i];
}
preprocess();
for(int i=1;i<=nrq;i++){
int x,y;
fin>>x>>y;
fout<<a[rmq(x-1,y-1)]<<'\n';
}
return 0;
}