Pagini recente » Monitorul de evaluare | Cod sursa (job #2751651) | Cod sursa (job #1988557) | Istoria paginii utilizator/sethdarko | Cod sursa (job #1982621)
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int v[100001];
int m[100001][17];
int log[100001];
int min(int a, int b){
if(a>b)
a=b;
return a;
}
int main()
{
FILE *fin, *fout;
int n,q,i,j;
fin=fopen("rmq.in","r");
fout=fopen("rmq.out","w");
fscanf(fin,"%d%d",&n,&q);
for(i=1;i<=n;i++){
fscanf(fin,"%d",&v[i]);
m[i][0]=v[i];
}
for(int p=1;(1<<p)<n;p++){
for(i=1;i+(1<<p)-1<=n;i++){
m[i][p]=min(m[i][p-1],m[i+(1<<(p-1))][p-1]);
}
}
log[1]=0;
for(i=2;i<=n;i++){
log[i]=log[i/2]+1;
}
for(q;q>0;q--){
fscanf(fin,"%d%d",&i,&j);
fprintf(fout,"%d\n",min(m[i][log[j-i]],m[j-(1<<log[j-i])+1][log[j-i]]));
}
fclose(fin);
fclose(fout);
return 0;
}