Pagini recente » Cod sursa (job #2884233) | Cod sursa (job #3147607) | Cod sursa (job #2199938) | Cod sursa (job #1298909) | Cod sursa (job #1248972)
#include<iostream>
#include<fstream>
using namespace std;
const int nmax = 100002;
const int lmax = 18;
long int n,m;
long int a[nmax];
long int lg[nmax];
long int M[lmax][nmax];
long int minim(long int a, long int b){
return ((a < b) ? a : b);
}
int main(){
ifstream f("rmq.in", ios::in);
ofstream g("rmq.out", ios::out);
long int i, j, l;
f >> n >> m;
for (int i = 1; i <= n; i++)
f >> a[i];
lg[1] = 0;
for (i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1;
for (i = 1; i <= n; i++)
M[0][i] = a[i];
for (i = 1;(1<<i)<=n;i++)
for (j = 0; j + (1 << i) - 1 <= n;j++){
if (M[i - 1][j] < M[i - 1][j +(1 << (i- 1))]){
M[i][j] = M[i-1][j];
}
else{
M[i][j] = M[i-1][j+(1<<(i-1))];
}
}
long int x, y;
for (i = 0; i < m; i++){
f >> x >> y;
l = lg[y - x + 1];
g << minim(M[l][x],M[l][y+1 - (1<<l)])<<'\n';
}
f.close();
g.close();
return 0;
}