Pagini recente » Cod sursa (job #1935203) | Cod sursa (job #1438460) | Cod sursa (job #458871) | Cod sursa (job #3268890) | Cod sursa (job #2819455)
#include <stdio.h>
#define MAX_N 100000
#define MAX_LOG 16
int v[MAX_N];
int table[MAX_N][MAX_LOG + 1];
int log2[MAX_N + 1];
inline int f(int x,int y){
return x < y ? x : y;
}
void precomputeLogs(int n){
int i;
log2[1]=0;
for(i=2;i<=n;i++)
log2[i]=log2[i/2]+1;
}
void build(int n){
int i, p;
for(i=0;i<n;i++){
table[i][0]=v[i];
}
for(p=1;p<MAX_LOG;p++){
for(i=0;i+(1<<p)-1<n;i++){
table[i][p]= f(table[i][p-1], table[i+(1<<(p-1))][p-1]);
}
}
}
int query(int left,int right){
int pos;
pos=log2[right-left+1];
return f(table[left][pos],table[right-(1<<pos)+1][pos]);
}
int main(){
FILE *fin,*fout;
int n,m,i,a,b;
fin=fopen("rmq.in","r");
fout=fopen("rmq.out","w");
fscanf(fin,"%d%d",&n,&m);
for(i=0;i<n;i++)
fscanf(fin,"%d",&v[i]);
precomputeLogs(n);
build(n);
while(m--){
fscanf(fin,"%d%d",&a,&b);
fprintf(fout,"%d\n",query(a-1,b-1));
}
fclose(fin);
fclose(fout);
return 0;
}