Pagini recente » Cod sursa (job #244246) | Cod sursa (job #2922590) | Cod sursa (job #1332525) | Cod sursa (job #399554) | Cod sursa (job #2500895)
using namespace std;
#include<iostream>
#include<fstream>
#define LMAX 100002
int n,m;
int a, b;
int k = 1;
int v[LMAX];
int rmq[18][LMAX];
int calcularePutere(int k, int lim, int p) {
while (k*p <= lim) {
k *= p;
}
return k;
}
void calculareRMQ(int v[], int rmq[][LMAX]) {
int p = 1;
int linie = 1;
for (int i = 1; i<=n; i++) {
rmq[1][i] = v[i];
}
while (linie < n) {
p *= 2;
linie++;
for (int i = 1; i<=n-linie+1; i++) {
rmq[linie][i] = min(rmq[linie-1][i], rmq[linie-1][i+1]);
}
}
/*for (int i = 1; i<=linie; i++) {
for (int j = 1; j<=n-i+1; j++) {
cout << rmq[i][j] << " ";
}
cout << endl;
}*/
}
int main() {
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin >> n >> m;
for (int i = 1; i<=n; i++) {
fin >> v[i];
}
calculareRMQ(v, rmq);
//cout << endl;
for (int i = 1; i<=m; i++) {
k = 1;
fin >> a >> b;
k = calcularePutere(k, b-a+1, 2);
// cout << k << endl;
fout << min(rmq[k][a], rmq[k][b-k+1]) << endl;
}
fin.close();
fout.close();
return 0;
}