Pagini recente » Cod sursa (job #758367) | Cod sursa (job #1009631) | Cod sursa (job #2334512) | Cod sursa (job #2654967) | Cod sursa (job #1471785)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100000
#define LOGN 17
int v[MAXN],mat[MAXN][LOGN+1];
inline int min(int a,int b){
if(a>b) return b;
return a;
}
int main(){
FILE*fi,*fout;
int a,b,i,j,n,m,x;
fi=fopen("rmq.in" ,"r");
fout=fopen("rmq.out" ,"w");
fscanf(fi,"%d%d" ,&n,&m);
for(i=0;i<n;i++)
fscanf(fi,"%d" ,&v[i]);
for(i=0;i<n;i++)
mat[i][0]=v[i];
for(j=1;j<=LOGN;j++)
for(i=0;i<n-(1<<j)+1;i++)
mat[i][j]=min(mat[i][j-1],mat[i+(1<<j-1)][j-1]);
for(i=0;i<m;i++){
fscanf(fi,"%d%d" ,&a,&b);
j=0;
while((1<<j)+a-1<=b)
j++;
j--;
fprintf(fout,"%d\n" ,min(mat[a-1][j],mat[b-(1<<j)][j]));
}
fclose(fi);
fclose(fout);
return 0;
}