Pagini recente » Cod sursa (job #1568021) | Cod sursa (job #2562012) | Cod sursa (job #1999728) | Cod sursa (job #1557333) | Cod sursa (job #1742979)
#include<stdio.h>
using namespace std;
FILE *f1=fopen("rmq.in","r");
FILE *f2=fopen("rmq.out","w");
int n,m,minim[20][100001],i,a,b,v[100001],k,j,log[100001],l;
int main(){
fscanf(f1,"%d%d",&n,&m);
for (i=1;i<=n;i++){
fscanf(f1,"%d",&v[i]);
minim[0][i]=i;
}
log[1]=0;
for (i=2;i<=n;i++)
log[i]=log[i/2]+1;
for (j=1;(1<<j)<=n;j++){
i=1;l=1<<(j-1);
while(i+2*l<=n){
if (v[minim[j-1][i]]<v[minim[j-1][i+l]]) minim[j][i]=minim[j-1][i];
else
minim[j][i]=minim[j-1][i+l];
i++;
}
}
for (i=1;i<=m;i++){
fscanf(f1,"%d%d",&a,&b);
k=log[b-a+1];l=1<<k;
if (v[minim[k][a]]<v[minim[k][b-l+1]]) fprintf(f2,"%d\n",v[minim[k][a]]);
else
fprintf(f2,"%d\n",v[minim[k][b-l+1]]);
}
fclose(f1);
fclose(f2);
return 0;
}