Pagini recente » Cod sursa (job #1775092) | Cod sursa (job #276744) | Cod sursa (job #892748) | Cod sursa (job #1920056) | Cod sursa (job #1528130)
#include <iostream>
#include <fstream>
#include <string.h>
#include <vector>
using namespace std;
const int nmax = 100002 ;
const int lmax = 18 ; // log2 100000 = 16.6
const int inf = 1 << 30 ;
int n;
int v[lmax][nmax], lg[nmax];
int main()
{
int m;
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d", &n, &m);
for (int i = 0; i<n ; i++) {
scanf("%d", &v[0][i]);
}
lg[1] = 0;
for (int i = 2; i<=n; i++)
lg[i] = lg[i/2] + 1;
for(int i = 1; (1 << i) < n ; i++) {
for (int j = 0; j <= m - (1 << i)+1 ; j++)
v[i][j] = min(v[i-1][j],v[i-1][j+(1 << (i-1))]);
}
long x,y,l;
for (;m;m--) {
scanf("%ld %ld",&x , &y);
int diff = y-x+1;
l = lg[diff];
int raad = diff - (1 << l) - 1;
printf("%d \n",min(v[l][x-1],v[l][x+ raad]));
}
fclose(stdin);
fclose(stdout);
return 0;
}