Pagini recente » Cod sursa (job #959005) | Cod sursa (job #1410252) | Cod sursa (job #100424) | Cod sursa (job #1595359) | Cod sursa (job #613983)
Cod sursa(job #613983)
#include <cstdio>
#include <fstream>
#include <algorithm>
using namespace std;
#define N 100001
int rmq[N][32],lg[N],n,q;
ifstream in ("rmq.in");
void read ()
{
in>>n>>q;
for(int i=1;i<=n;++i)
in>>rmq[i][0];
}
void dinam ()
{
for(int i=2;i<=n;++i)
lg[i]=lg[i>>1]+1;
for(int j=1;(1<<j)<=n;++j)
for(int i=1;i<=n;++i){
rmq[i][j]=rmq[i][j-1];
if(i+(1<<(j-1))<=n)
rmq[i][j]=min(rmq[i][j],rmq[i+(1<<(j-1))][j-1]);
}
}
void solve ()
{
freopen ("rmq.out","w",stdout);
for(int x,y,k;q;--q){
in>>x>>y;
if(x==y)
printf("%d\n",rmq[x][0]);
else{
k=lg[y-x];
printf("%d\n",min(rmq[x][k],rmq[y-(1<<k)+1][k]));
}
}
}
int main ()
{
read();
dinam();
solve();
return 0;}