Pagini recente » Cod sursa (job #1997490) | Cod sursa (job #2442865) | Cod sursa (job #2903942) | Cod sursa (job #1192833) | Cod sursa (job #2544206)
#include <iostream>
#include <fstream>
std::ifstream f("rmq.in");
std::ofstream g("rmq.out");
const int NMAX = 100'005;
int n,t,rmq[20][NMAX],log[NMAX],x,y;
int main(){
f >> n >> t;
for(int i = 1;i <= n;++i)
f >> rmq[0][i];
//precalulez logaritm din nr de la 1 la n
log[0] = log[1] = 0;
for(int i = 2;i <= n;++i)
log[i] = 1 + log[i / 2];
//precalculez rmq
for(int i = 1;i <= log[n];++i){
for(int j = 1;j <= n;++j){
rmq[i][j] = rmq[i - 1][j];
int e = i - 1;
int index = j + (1 << e);
if(index <= n && rmq[i][j] > rmq[i - 1][index])
rmq[i][j] = rmq[i - 1][index];
}
}
while(t--){
f >> x >> y;
int len = y - x + 1;
g << std::min(rmq[log[len]][x],rmq[log[len]][ y - (1 << log[len]) + 1]) << '\n';
}
return 0;
}