Pagini recente » Cod sursa (job #78934) | Cod sursa (job #2818633) | Cod sursa (job #781739) | Cod sursa (job #1282630) | Cod sursa (job #2462304)
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int main(){
int *vect, i, j, x, y, n, kk;
f >> n >> kk;
int M[n][18] = {0};
vect = new int[n + 1];
for( i = 0; i < n; i++ ){
f >> vect[i];
M[i][0] = i;
}
for( j = 1; (1<< j) <= n; j++ )
for( i = 0; i + (1 << j) <= n; i++){
if( vect[M[i][j-1]] < vect[M[i + (1<<(j - 1))][j - 1]] )
M[i][j] = M[i][j-1];
else
M[i][j] = M[i + (1<<(j - 1))][j - 1];
}
for( i = 1; i <= kk; i++){
f >> x >> y;
int k = int(log2(y - x + 1));
x--;
y--;
if( vect[M[x][k]] <= vect[M[y - (1<<k) + 1][k]])
g << vect[M[x][k]]<<"\n";
else
g << vect[M[y - (1<<k) + 1][k]] << "\n";
}
delete []vect;
}