Pagini recente » Cod sursa (job #2358468) | Cod sursa (job #2096542) | Cod sursa (job #3149327) | Cod sursa (job #2552812) | Cod sursa (job #2241413)
#include <iostream>
#include <fstream>
#define NMAX 100002
#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 = 0 ; 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 = 0 ; i < N; i++)
sparse[i][0]=a[i];
for(int j = 1; (1<<j) < N; j++)
for(int i = 0 ; i + (1<<j) - 1 <= N; i++)
{
sparse[i][j]=min(sparse[i][j-1],sparse[i+(1<<(j-1))][j-1]);
}
long int k,diff,low,high;
for(int i = 1; i <= M; i++)
{
fin>>low>>high;
low--;
high--;
diff=high-low+1;
k=lg[diff]-1;
fout<<min(sparse[low][k],sparse[high-(1<<k) +1 ][k])<<'\n';
}
return 0;
}