Pagini recente » Istoria paginii utilizator/gatomei | Cod sursa (job #245843) | Cod sursa (job #199898) | Monitorul de evaluare | Cod sursa (job #1887851)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int N,M,rmq[100010][220];
int main(){
fin >>N>>M;
for (int i=0;i<N;i++){
fin >>rmq[i][0];
}
for (int j=1;(1<<j)<=N;j++){
for (int i=0;i+(1<<(j))-1<N;i++){
rmq[i][j]=min(rmq[i][j-1],rmq[i+(1<<(j-1))][j-1]);
}
}
/*
for (int j=0;(1<<j)<=N;j++){
for (int i=0;i+(1<<(j))-1<N;i++){
//rmq[i][j]=min(rmq[i][j-1],rmq[i+(1<<(j-1))][j-1]);
cout <<rmq[i][j]<<" ";
}
cout <<endl;
}
*/
for (int i=0;i<M;i++){
int x,y,l,k;
fin >>x>>y;
x--;y--;
l=y-x+1;
k=int(log2(l));
int dif=l-(1<<k);
//fout <<l<<" "<<k<<" ";
//cout <<rmq[x][k]<<" "<<rmq[x+(1<<(k))-1][l-(1<<(k))]<<endl;
fout <<min(rmq[x][k],rmq[x+dif][k])<<"\n";
}
return 0;
}