Pagini recente » Cod sursa (job #99970) | Cod sursa (job #2340816) | Cod sursa (job #913213) | Cod sursa (job #1927261) | Cod sursa (job #2241409)
#include <iostream>
#include <fstream>
#define NMAX 10001
#define LMAX 18
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int a[NMAX],lg[NMAX];
int sparse[LMAX][LMAX];
int N,M;
int main()
{
fin>>N>>M;
for(int i = 1 ; i <= N; i++)
fin>>a[i];
lg[1]=0;
for(int i = 2; i <= N; i++)
lg[i]=lg[i/2]+1;
for(int i = 1 ; i <= N; i++)
sparse[i][0]=i;
for(int j = 1; (1<<j) <= N; j++)
for(int i = 1 ; i + (1<<j) - 1 <= N; i++)
{
if(a[sparse[i][j-1]] < a[sparse[i+(1<<(j-1))][j-1]])
sparse[i][j]=sparse[i][j-1];
else sparse[i][j]=sparse[i+(1<<(j-1))][j-1];
}
long int l,k,diff,low,high;
for(int i = 1; i <= M; i++)
{
fin>>low>>high;
diff=high-low+1;
k=lg[diff];
fout<<min(a[sparse[low][k]],a[sparse[low+diff-(1<<k)][k]])<<'\n';
}
return 0;
}