Pagini recente » preONI 2008 | gdrgasd | Cod sursa (job #692779) | Cod sursa (job #1384531) | Cod sursa (job #2787966)
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,mi[NMAX][30],lg[NMAX],v[NMAX],q,x,y,l,k;
void minim()
{
for(int i=1;i<=n;i++)
mi[i][0]=v[i];
for(int j=1;(1<<j)<=n;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
if(mi[i][j-1]<mi[i+(1<<(j-1))][j-1])
mi[i][j]=mi[i][j-1];
else
mi[i][j]=mi[i+(1<<(j-1))][j-1];
}
int main()
{
fin>>n>>q;
for(int i=1;i<=n;i++)
fin>>v[i];
lg[1]=0;
for(int i=2;i<=n;i++)
lg[i]=lg[i/2]+1;
minim();
for(int i=1;i<=q;i++)
{
fin>>x>>y;
l=y-x+1;
k=lg[l];
fout<<min(mi[x][k],mi[x+l-(1<<k)][k])<<"\n";
}
return 0;
}