Pagini recente » Cod sursa (job #1072871) | Cod sursa (job #2155714) | Cod sursa (job #1007360) | Cod sursa (job #923530) | Cod sursa (job #2501814)
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 lim) {
int exp = 0;
int p = 1;
while (p*2 <= lim) {
exp++;
p *= 2;
}
return exp;
}
void calculareRMQ(int v[], int rmq[18][LMAX]) {
int linie = 1;
for (int i = 1; i<=n; i++) {
rmq[1][i] = v[i];
}
while (linie < n) {
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(b-a+1);
// cout << k << endl;
fout <<rmq[b-a+1][a] << endl;
}
fin.close();
fout.close();
return 0;
}