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