Pagini recente » Cod sursa (job #2943362) | Cod sursa (job #2493933) | Cod sursa (job #324405) | Cod sursa (job #2035267) | Cod sursa (job #2031320)
#include<fstream>
#define MAX_N 100000
#define MAX_LOG 17
using namespace std;
int v[MAX_N], sparse[MAX_N][MAX_LOG], n, m;
inline int log2(int x) {
return 31 - __builtin_clz(x);
}
inline int RMQ(int low, int high) {
int l, k;
l = high - low + 1;
k = log2(l);
return min(v[sparse[low][k]],v[sparse[low + l - (1 << k)][k]]);
}
int main() {
int i, j, x, y;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin >> n >> m;
for(i=0; i<n; i++) {
fin >> v[i];
sparse[i][0] = i;
}
for(j=1; (1 << j) <= n; j++)
for(i=0; i + (1 << j) - 1 <n; i++)
if(v[sparse[i][j-1]] < v[sparse[i + (1 << (j-1))][j-1]])
sparse[i][j] = sparse[i][j-1];
else sparse[i][j] = sparse[i + (1 << (j-1))][j-1];
for(i=1; i<=m; i++) {
fin >> x >> y;
fout << RMQ(x-1,y-1) << "\n";
}
fin.close();
fout.close();
return 0;
}