Pagini recente » Cod sursa (job #2471011) | Cod sursa (job #2223017) | Cod sursa (job #929264) | Cod sursa (job #2318579) | Cod sursa (job #2559747)
#include <fstream>
std::ifstream f("rmq.in");
std::ofstream g("rmq.out");
int n,t,rmq[20][100005],log[100005],x,y;
int main(){
f >> n >> t;
for(int i = 1;i <= n;++i)
f >> rmq[0][i];
for(int i = 2;i <= n;++i)
log[i] = 1 + log[i / 2];
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;
if(j + (1 << e) <= n && rmq[i - 1][j + (1 << e)] < rmq[i][j])
rmq[i][j] = rmq[i - 1][j + (1 << e)];
}
}
/*
for(int i = 0;i <= log[n];++i,g << '\n')
for(int j = 1;j <= n;++j)
g << rmq[i][j];
*/
while(t--){
f >> x >> y;
int l = y - x + 1;
int e = log[l];
g << std::min(rmq[log[l]][x],rmq[log[l]][y - (1 << e) + 1]) << '\n';
}
return 0;
}