Pagini recente » Cod sursa (job #987616) | Cod sursa (job #3334497) | Cod sursa (job #322359) | Monitorul de evaluare | Cod sursa (job #3314756)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n , m , r[17][100001] , st , dr;
int E[100001];
int main(){
fin >> n >> m;
for(int i = 1 ; i <= n ; i++){
fin >> r[0][i];
}
for(int p = 1 ; (1 << p) <= n ; p++){
for(int i = 1 ; i <= n ; i++){
r[p][i] = r[p - 1][i];
int j = i + (1 << (p - 1));
if(j <= n){
r[p][i] = min(r[p][i] , r[p - 1][j]);
}
}
}
E[1] = 0;
for(int i = 2 ; i <= n ; i++)
E[i] = 1 + E[i / 2];
for(int i = 1 ; i <= m ; i++){
fin >> st >> dr;
int e = E[dr - st + 1];
int len = (1 << e);
fout << min(r[e][st] , r[e][dr - len + 1]) <<'\n';
}
return 0;
}