Pagini recente » Cod sursa (job #536230) | Cod sursa (job #1160572) | Cod sursa (job #3276889) | Cod sursa (job #227304) | Cod sursa (job #1205575)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <fstream>
#define lmax 100005
#define loglmax 17
FILE *f=fopen("rmq.in","r");
FILE *g=fopen("rmq.out","w");
using namespace std;
int n,m ,r[loglmax][lmax];
int16_t lg[lmax];
int main()
{int i , j , a , b , L;
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++) fscanf(f,"%d",&r[0][i]);
for(i=1;i<loglmax;i++) for(j=1;j<=n;j++)
if((1<<i)<=j) r[i][j]=min( r[i-1][j-(1<<(i-1))] , r[i-1][j]);
lg[1] = 0;
for(i=2;i<=n; i++) lg[i] = 1 + lg[i / 2];
for(i = 1 ; i <= m ; i++)
{fscanf(f,"%d %d",&a,&b);
L = lg[b - a + 1];
fprintf(g,"%d\n",min(r[L][b] , r[L][a + (1 << L) - 1]));
}
return 0;
}