Pagini recente » Cod sursa (job #298706) | Cod sursa (job #302141) | Cod sursa (job #866407) | Cod sursa (job #2840875) | Cod sursa (job #2755202)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define NMax 100005
#define LMax 19
ifstream f("rmq.in");
ofstream g("rmq.out");
int main()
{
auto rmq = new int[NMax][LMax];
vector<int> v;
int log[NMax];
int n,x,y,m;
f >> n >> m;
for(int i =0; i< NMax; i++){
for(int j = 0; j< LMax; j++){
rmq[i][j] = 1000001;
}
}
log[1]=0;
for (int i=2;i<=n;i++)
log[i]=log[i/2]+1;
for(int i = 0; i< n; i++){
f >> x;
rmq[i][0] = x;
v.push_back(x);
}
int range = 2;
for(int j = 1; range <= n; j++, range*=2){
for(int i = 0; i + range-1< n; i++){
rmq[i][j] = min(rmq[i][j-1], rmq[i+range/2][j-1]);
}
}
for(int k = 0; k< m; k++){
f>> x >> y;
int t = log[y-x+1];
g << min(rmq[x-1][t], rmq[x + t-1][t]) << "\n";
}
return 0;
}