Pagini recente » Cod sursa (job #3176253) | Cod sursa (job #1748524) | Cod sursa (job #2122889) | Cod sursa (job #709141) | Cod sursa (job #2731114)
using namespace std;
#include<bits/stdc++.h>
int rmq[18][18];
int n,m;
int a[100002];
int lg[100002];
int l;
int main() {
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin >> n >> m;
for (int i = 1; i<=n; i++) {
fin >> a[i];
}
lg[1] = 0;/*
cout << '0';
for (int i = 2; i<=n; i++) {
lg[i] = lg[i/2]+1;
cout << " " << lg[i];
}
cout << endl;*/
for (int i = 1; i<=n; i++) {
rmq[0][i] = a[i];
}
for (int i = 1; (1<<i) <= n; i++) {
for (int j = 1; j<= n - (1<<i)+1; j++) {
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+(1<<(i-1))]);
}
}
/*
for (int i = 0; (1<<i) <= n; i++) {
for (int j = 1; j<=n-(1<<i)+1; j++) {
cout << rmq[i][j] << " ";
}
cout << endl;
}
*/
int x,y, diff, sh;
for (int i = 1; i<=m; i++) {
fin >> x >> y;
diff = y-x+1;
l = lg[diff];
sh = diff - (1<<l);
fout << min(rmq[l][x], rmq[l][x+sh]) << endl;
}
fin.close();
fout.close();
return 0;
}