Pagini recente » Cod sursa (job #31666) | Cod sursa (job #1781909) | Rating Yasin Tornaci (yasintornaci) | Cod sursa (job #1386253) | Cod sursa (job #2741947)
#include <bits/stdc++.h>
using namespace std;
const int mxn = 1e5 + 1;
const int mxm = 17;
int n, m;
int rmq[mxm][mxn];
inline int minInterval(int x, int y){
int nr = 0;
int dist = y - x + 1;
int dist1 = y - x + 1;
while (dist) {
dist /= 2;
nr++;
}
nr--;
dist = (1 << nr);
return min(rmq[nr][x - 1], rmq[nr][x - 1 + (dist1 - dist)]);
}
int main()
{
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin >> n >> m;
for ( int i = 0; i < n; i++ ) {
fin >> rmq[0][i];
}
for ( int i = 1; (1 << i) < n; i++ ) {
int x = (1 << i);
for ( int j = 0; j + x <= n; j++ ) {
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + x/2]);
}
}
for ( int i = 0; i < m; i++ ) {
int x, y;
fin >> x >> y;
fout << minInterval(x, y) << '\n';
}
return 0;
}