Pagini recente » Cod sursa (job #1763194) | Cod sursa (job #560116) | Cod sursa (job #1431727) | Cod sursa (job #2651180) | Cod sursa (job #218603)
Cod sursa(job #218603)
#include<stdio.h>
#include<algorithm>
using namespace std;
int v[100111],a[18][100111];
int d,p,u,i,j,n,m,lg[100111];
int main(){
FILE *f=fopen("rmq.in","r");
FILE *g=fopen("rmq.out","w");
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++)
fscanf(f,"%d ",&v[i]);
j=2;
int q=0;
for(i=1;i<=n;i++){
if(i==j){
q++;
lg[i]=q;
j=j<<1;
}
lg[i]=q;
}
int N=lg[n];
for(i=1;i<=n;i++)
a[0][i]=v[i];
for(i=1;i<=N;i++){
for(j=1;j+(1<<(i)) -1 <=n;j++){
a[i][j]=a[i-1][j];
if(a[i][j] > a[i-1][j+(1<<(i-1))])
a[i][j] = a[i-1][j+(1<<(i-1))];
}
}
for(i=1;i<=m;i++){
fscanf(f,"%d %d",&p,&u);
d=u-p;
fprintf(g,"%d\n",min( a[lg[d]][p] , a[ lg[d] ][u-(1<<lg[d]) + 1] ));
}
fclose(f);
fclose(g);
return 0;
}