Pagini recente » Cod sursa (job #575244) | Cod sursa (job #231455) | Cod sursa (job #1306210) | Cod sursa (job #1756889) | Cod sursa (job #2241428)
#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[NMAX][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 <= N-(1<<j); 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];
fout<<min(sparse[low][k],sparse[high-(1<<(k)) +1 ][k])<<'\n';
}
return 0;
}