Pagini recente » Cod sursa (job #714533) | Cod sursa (job #1625967) | Cod sursa (job #2241748) | Cod sursa (job #1584986) | Cod sursa (job #613988)
Cod sursa(job #613988)
#include <cstdio>
#include <fstream>
#include <algorithm>
using namespace std;
#define N 100001
int rmq[N][18],lg[N],n,q;
int main ()
{
ifstream in ("rmq.in");
in>>n>>q;
for(int i=1;i<=n;++i)
in>>rmq[0][i];
for(int i=2;i<=n;++i)
lg[i]=lg[i>>1]+1;
++n;
for(int j=1;(1<<j)<=n;++j)
for(int i=1;i+(1<<j)<=n;++i){
rmq[j][i]=rmq[j-1][i];
if(i+(1<<(j-1))<n)
rmq[j][i]=min(rmq[j][i],rmq[j-1][i+(1<<(j-1))]);
}
freopen ("rmq.out","w",stdout);
for(int x,y,k;q;--q){
in>>x>>y;
if(x==y)
printf("%d\n",rmq[0][x]);
else{
k=lg[y-x];
printf("%d\n",min(rmq[k][x],rmq[k][y-(1<<k)+1]));
}
}
return 0;}