Pagini recente » Cod sursa (job #58426) | Cod sursa (job #2986488) | Cod sursa (job #1360983) | Cod sursa (job #677904) | Cod sursa (job #2921667)
#include <iostream>
#include <stdio.h>
using namespace std;
#define MAX_N 100000
#define MAX_LOG 16
int v[MAX_N][MAX_LOG+1];
int log2[MAX_N+1];
inline int f(int a,int b){
return a<b?a:b;
}
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(p=1;p<=MAX_LOG;p++)
for(i=0;i+(1<<p)-1<n;i++)
v[i][p]=f(v[i][p-1],v[i+(1<<(p-1))][p-1]);
}
int query(int a,int b){
int log;
log=log2[b-a+1];
return f(v[a][log],v[b-(1<<log)+1][log]);
}
int main(){
FILE *fin,*fout;
int m,n,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][0]);
}
precomputeLogs(n);
build(n);
while(m--){
fscanf(fin,"%d%d",&a,&b);
fprintf(fout,"%d\n",query(a-1,b-1));
}
fclose(fout);
return 0;
}