Pagini recente » Cod sursa (job #347987) | Cod sursa (job #461668) | Cod sursa (job #2008912) | Cod sursa (job #1015071) | Cod sursa (job #3130472)
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
int rmq[100003][17], logg2[100003];
int main(){
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m;
f>>n>>m;
int a[n], i = 0;
while(i<n){
f>>a[i++];
}
for (int i = 0; i < n; i++) {
rmq[i][0] = a[i];
}
for (int j = 1; pow(2, j) <= n; j++) {
int p = pow(2, j-1);
for (int i = 0; i + p*2 - 1 < n; i++) {
if (rmq[i][j - 1] < rmq[i + p][j - 1]) {
rmq[i][j] = rmq[i][j - 1];
} else {
rmq[i][j] = rmq[i + p][j - 1];
}
}
}
logg2[1] = 0;
for(int i = 2; i <= n; i ++)
logg2[i] = logg2[i / 2] + 1;
cout<<endl;
int b, c;
while(m>0){
f>>b>>c;
b--; c--;
int k = logg2[c-b+1], p = pow(2, k);
if (rmq[b][k] <= rmq[c-p+1][k]) {
g<<rmq[b][k]<<endl;
} else {
g<<rmq[c - p + 1][k]<<endl;
}
m--;
}
f.close();
g.close();
return 0;
}