Pagini recente » Rezultatele filtrării | Rezultatele filtrării | Cod sursa (job #10603) | Cod sursa (job #2110092) | Cod sursa (job #1015675)
#include<cstdio>
int n,m,d[21][100001],i,j,st,dr,p[100001],x,y;
FILE *f,*g;
int main(){
f=fopen("rmq.in","r");
g=fopen("rmq.out","w");
fscanf(f,"%d%d",&n,&m);
p[1]=0;
for(i=1;i<=100000;i++){
p[i]=p[i/2]+1;
}
for(i=1;i<=n;i++){
fscanf(f,"%d",&d[0][i]);
}
for(i=1;i<=p[n];i++){
x=(1<<(i-1));
for(j=1;j<=n;j++){
if(d[i-1][j]>d[i-1][j+x] && d[i-1][j+x]>0)
d[i][j]=d[i-1][j+x];
else
d[i][j]=d[i-1][j];
}
}
for(i=1;i<=m;i++){
fscanf(f,"%d%d",&st,&dr);
x=dr-st+1;
y=(1<<p[x]-1);
if(d[p[x]-1][st]<d[p[x]-1][dr-y+1])
fprintf(g,"%d\n",d[p[x]-1][st]);
else
fprintf(g,"%d\n",d[p[x]-1][dr-y+1]);
}
fclose(f);
fclose(g);
return 0;
}