Pagini recente » Cod sursa (job #312048) | Cod sursa (job #2337553) | Cod sursa (job #2045324) | Cod sursa (job #928327) | Cod sursa (job #1042695)
#include<iostream>
#include<cstdio>
using namespace std;
int d[100000][17], maxpow[17];
void precalculez()
{
maxpow[1] = 0;
for(int i = 2; i < 17; i ++)
maxpow[i]=maxpow[i/2] + 1;
}
int main()
{
FILE *fin, *fout;
fin=fopen("rmq.in", "r");
fout=fopen("rmq.out", "w");
int i, n, m, x, y, lg, j, l;
fscanf(fin, "%d %d", &n, &m);
precalculez();
lg=maxpow[n];
for(i = 1; i <= n; i++)
fscanf(fin, "%d", &d[i][0]);
for(i = 1; i <= lg; i ++)
for(j = 1; j <= n; j++)
d[j][i]=min(d[j][i - 1], d[j+(1 << (i-1))][i - 1]);
for(i = 0; i < m; i++)
{
fscanf(fin, "%d %d", &x, &y);
l = y - x + 1;
fprintf(fout, "%d\n", min(d[x][maxpow[l]], d[1 + y - (1 << (maxpow[l]))][maxpow[l]]));
}
}