Pagini recente » Cod sursa (job #2177067) | Cod sursa (job #2140826) | Cod sursa (job #127357) | Cod sursa (job #2758726) | Cod sursa (job #3216851)
#include <fstream>
#include <vector>
#define NMAX 100008
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,q;
int a[NMAX];
int log(int val);
int rmq[NMAX][30];
int main()
{
fin>>n>>q;
for(int i=1;i<=n;i++)
{
fin>>a[i];
}
for(int i=1;i<=n;i++)
rmq[i][0]=i;
for(int j=1;(1<<j)<=n;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
if(a[rmq[i][j-1]]<a[rmq[i+(1<<(j-1))][j-1]])
rmq[i][j]=rmq[i][j-1];
else
rmq[i][j]=rmq[i+(1<<(j-1))][j-1];
for(int i=1;i<=q;i++)
{
int x,y;
fin>>x>>y;
int aux=y-x+1;
aux=log(aux);
fout<<min(a[rmq[x][aux]],a[rmq[y-(1<<aux)+1][aux]])<<'\n';
}
return 0;
}
int log(int val)
{
if(val==1)
return 0;
return 1+log(val/2);
}