Pagini recente » Cod sursa (job #1185445) | Cod sursa (job #345935) | Cod sursa (job #745731) | Cod sursa (job #2455617) | Cod sursa (job #563251)
Cod sursa(job #563251)
#include<stdio.h>
#include<math.h>
FILE*f=fopen("rmq.in","r");
FILE*g=fopen("rmq.out","w");
int n,m,x,y,z,i,j,a[100001][18],v[100001],p[100001];
inline int min(int a,int b){
if(a<b)
return a;
else return b;
}
int main() {
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;++i)
fscanf(f,"%d",&v[i]);
p[1]=0;
for(i=2;i<=100000;++i)
p[i]=1+p[i/2];
for(i=1;i<=n;++i)
a[i][0]=v[i];
x=1;
for(j=1;j<=p[n]+1;++j){
for(i=1;i+x<=n;++i)
a[i][j]=min(a[i][j-1],a[i+x][j-1]);
x*=2;
}
for(i=1;i<=m;++i){
fscanf(f,"%d%d",&x,&y);
z=y-x+1;
int t=1<<p[z];
fprintf(g,"%d\n",min(a[x][p[z]],a[y-t+1][p[z]]));
}
fclose(g);
fclose(f);
return 0;
}