Pagini recente » Cod sursa (job #3137504) | Cod sursa (job #1910379) | Cod sursa (job #1555304) | Cod sursa (job #2381375) | Cod sursa (job #2739555)
#include <bits/stdc++.h>
#define pp pair< int, int >
using namespace std;
const int mxn = 100 * 1000 + 10;
const int mxm = 20;
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 cin("rmq.in");
ofstream cout("rmq.out");
cin>> n >> m;
for(int i = 0; i < n; i++){
cin>>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, x, y; i < m; i++){
cin>> x >> y;
cout<< minInterval(x, y ) << '\n';
}
return 0;
}