Pagini recente » Cod sursa (job #2224449) | Cod sursa (job #2622869) | Cod sursa (job #1991553) | Cod sursa (job #459725) | Cod sursa (job #1042698)
#include<iostream>
#include<cstdio>
using namespace std;
int d[100005][20], maxpow[100005];
void precalculez()
{
maxpow[1] = 0;
for(int i = 2; i <= 100005; 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]]));
}
}