Pagini recente » Cod sursa (job #3039327) | Cod sursa (job #3126033) | Diferente pentru implica-te/arhiva-educationala intre reviziile 44 si 223 | Cod sursa (job #3220427) | Cod sursa (job #868214)
Cod sursa(job #868214)
#include<stdio.h>
FILE *fin=fopen("rmq.in","r");
FILE *fout=fopen("rmq.out","w");
int a[200000][18],v[100010], F[100010];
int n , m, j, p, i, x, y, sol, k;
int minim(int a, int b){
if(a<b) return a;
return b;
}
int main(){
fscanf(fin,"%d %d",&n,&m);
for(i = 1; i<=n; i++){
fscanf(fin,"%d",&v[i]);
a[i][0]=v[i];
}
for(j=1,p=2 ; p<2*n; j++,p*=2 ){
for(i=1;i<=n;i++){
a[i][j]=minim( a[i][j-1], a[i+p/2][j-1] );
}
}
/*for(i=1;i<=n;i++){
for(k=0;k<j;k++){
printf("%d ",a[i][k]);
}
printf("\n");
}*/
F[1]=0;
for(i=2;i<=n;i++){
F[i]=F[i/2]+1;
}
for(;m;--m){
fscanf(fin,"%d %d",&x,&y);
k = y-x+1;
k = F[k];
sol = minim( a[x][k], a[ y-( 1<<k )+1 ][k] );
fprintf(fout,"%d\n", sol );
}
return 0;
}