Pagini recente » Cod sursa (job #737837) | Cod sursa (job #2322884) | Cod sursa (job #982049) | Cod sursa (job #2584281) | Cod sursa (job #1341747)
#include<stdio.h>
#include<algorithm>
using namespace std;
FILE *in, *out;
//definitions
//constants
const int sz = (int) 1e6+1;
//variables
int n, quest;
int rmq[18][sz];
int lg[sz];
int left, right;
//functions
int main(void)
{
in = fopen("rmq.in", "rt");
out = fopen("rmq.out", "wt");
fscanf(in, "%d%d", &n, &quest);
for(int i=1; i<=n; ++i)
fscanf(in,"%d", &rmq[0][i]);
for(int i=1; (1<<i) <= n ; ++i)
for(int j=1; j <= n-(1<<i)+1; ++j)
rmq[i][j] = min( rmq[i-1][j], rmq[i-1][j + (1<<(i-1))]);
for(int i=2; i<=n; ++i)
lg[i] = lg[i/2] + 1;
while(quest--)
{
fscanf(in,"%d%d",&left, &right);
int line = lg[(right-left) + 1];
fprintf(out, "%d\n", min(rmq[line][left], rmq[line][right-(1<<line)+1]));
}
fclose(in);
fclose(out);
return 0;
}