Pagini recente » Cod sursa (job #2653490) | Cod sursa (job #2378197) | Cod sursa (job #2527355) | Cod sursa (job #783616) | Cod sursa (job #1484307)
#include <fstream>
#include <cmath>
using namespace std;
int a[100010];
int m, c,N,index;
int M[1000010][20];
void rmq(){
for (int i = 0; i < N; ++i)
M[i][0] = i;
for (int j = 1; (1 << j) <= N; ++j)
for (int i = 0; i + (1 << j) - 1 < N; ++i)
if (a[M[i][j - 1]] < a[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];
}
int main(){
ifstream f("rmq.in");
ofstream of("rmq.out");
f >> N >> m;
for (int i = 0; i < N; ++i)
f >> a[i];
rmq();
for (int i = 0; i < m; ++i){
f >> c >> N;
--c;
--N;
int k = log2(N - c + 1);
index = (a[M[c][k]] <= a[M[N - (int)pow(2,k) + 1][k]]) ? M[c][k] : M[N - (int)pow(2,k) + 1][k];
of<< a[index] << "\n";
}
return 0;
}