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