Pagini recente » Cod sursa (job #1911516) | Cod sursa (job #3236547) | Cod sursa (job #1884632) | Cod sursa (job #467256) | Cod sursa (job #2353453)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
const int NMAX=1e5+5;
int n,m,x,y,v[NMAX],SP[NMAX][17];
void Sparse()
{
for(int i=1;i<=n;i++) SP[i][0]=i;
for(int j=1;(1<<j)<=n;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
if(v[SP[i][j-1]] < v[SP[i+(1<<(j-1))][j-1]]) SP[i][j]=SP[i][j-1];
else SP[i][j]=SP[i+(1<<(j-1))][j-1];
}
int rmq(int low,int high)
{
int L=high-low+1;
int K=log2(L);
return min(v[SP[low][K]],v[SP[low+L-(1<<K)][K]]);
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++) fin>>v[i];
Sparse();
while(m--)
{
fin>>x>>y;
fout<<rmq(x,y)<<'\n';
}
return 0;
}