Pagini recente » Cod sursa (job #2902045) | Cod sursa (job #2070153) | Cod sursa (job #904982) | Cod sursa (job #1025985) | Cod sursa (job #2882371)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n;
int const N=100005;
int const J=log2(N)+3;
int a[N][J];
int p2[J];
void build()
{
p2[0]=1;
for(int i=1;i<=J;i++)
p2[i]=p2[i-1]*2;
int power=1;
for(int j=1;j<=J;j++)
{
for(int i=1;i<=N;i++)
if(i+power<=n)
a[i][j]=min(a[i][j-1],a[i+power][j-1]);
else
break;
power*=2;
}
}
int main()
{
int q;
fin>>n>>q;
for(int i=1;i<=n;i++)
fin>>a[i][0];
build();
while(q--)
{
int x,y;
fin>>x>>y;
if(x>y)
swap(x,y);
int val=log2(y-x+1);
fout<<min(a[x][val],a[y-p2[val]+1][val])<<'\n';
}
}