Pagini recente » Cod sursa (job #751187) | Cod sursa (job #1733838) | Cod sursa (job #1237549) | Cod sursa (job #764893) | Cod sursa (job #2280301)
#include <iostream>
#include <stdio.h>
using namespace std;
int d[100001][18];
int v[100001];
int log[100001];
int main() {
FILE *fin, *fout;
int i, j, n, m, p;
fin = fopen("rmq.in", "r");
fout = fopen("rmq.out", "w");
fscanf(fin,"%d%d", &n, &m);
for(i=1;i<=n;i++)
fscanf(fin,"%d", &v[i]);
for(i=1;i<=n;i++)
d[i][0]=v[i];
for(p=1;(1<<p)<n;p++){
for(i=1;i+(1<<p)-1<=n;i++){
d[i][p]=min(d[i][p-1], d[i+(1<<p-1)][p-1]);
}
}
log[1]=0;
for(i=2;i<=n;i++)
log[i]=log[i/2]+1;
for(m;m>0;m--){
fscanf(fin,"%d%d", &i, &j);
fprintf(fout, "%d\n", min(d[i][log[j-i]], d[j-(1<<log[j-i])+1][log[j-i]]));
}
fclose(fin);
fclose(fout);
return 0;
}