Pagini recente » Cod sursa (job #506862) | Cod sursa (job #428256) | Cod sursa (job #882454) | Cod sursa (job #541173) | Cod sursa (job #701180)
Cod sursa(job #701180)
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int n,m,a[100005],s[100005][20],p[20];
FILE *f,*g;
void cit(){
int i;
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++)
fscanf(f,"%d",&a[i]);
}
void pd(){
int i,j;
for(i=1;i<=n;i++)
s[i][0]=i;
for(j=1;(1<<j)<=n;j++)
for(i=1;i+(1<<j)-1<=n;i++)
if(a[s[i][j-1]]<a[s[i+(1<<(j-1))][j-1]])
s[i][j]=s[i][j-1];
else
s[i][j]=s[i+(1<<(j-1))][j-1];
}
void putere(){
int i;
p[0]=1;
for(i=1;p[i-1]*2<=100002;i++)
p[i]=2*p[i-1];
}
void query(){
int i,x,y,k;
for(i=1;i<=m;i++){
fscanf(f,"%d%d",&x,&y);
k=(int)log2(y-x+1);
if(a[s[x][k]]<a[s[y-p[k]+1][k]])
fprintf(g,"%d\n",a[s[x][k]]);
else
fprintf(g,"%d\n",a[s[y-p[k]+1][k]]);
}
}
int main(){
f=fopen("rmq.in","r");
g=fopen("rmq.out","w");
cit();
pd();
putere();
query();
fclose(f);
fclose(g);
return 0;
}