Pagini recente » Cod sursa (job #1369569) | Cod sursa (job #2890741) | Cod sursa (job #432752) | Cod sursa (job #633332) | Cod sursa (job #154942)
Cod sursa(job #154942)
#include<stdio.h>
long m,n,t,i,j,a[270000],s[270000],d[270000],st,dr,zero=1,inf=100001;
long query( long poz);
int main()
{ FILE *f=fopen("rmq.in","r"),
*g=fopen("rmq.out","w");
fscanf(f,"%ld%ld",&n,&m);
while(zero<n) zero<<=1;
zero--;
for(i=1;i<=n;i++){ fscanf(f,"%ld",&a[zero+i]); s[zero+i]=i; d[zero+i]=i;}
for(j=i;j<=zero+1;j++){a[zero+j]=inf;s[zero+j]=j;d[zero+j]=j;}
for(j=zero;j>=1;j--){ a[j]=(a[j<<1]<a[(j<<1)|1])?a[j<<1]:a[(j<<1)|1];
s[j]=s[j<<1]; d[j]=d[(j<<1)|1];
}
for(t=1;t<=m;t++)
{ fscanf(f,"%ld%ld",&st,&dr);
fprintf(g,"%ld\n",query(1));
}
fcloseall();
return 0;
}
long query( long poz)
{ long m1,m2;
if(dr<s[poz]) return inf;
if(st>d[poz]) return inf;
if(st<=s[poz]&&d[poz]<=dr) return a[poz];
m1=query(poz<<1);
m2=query((poz<<1)|1);
m1=(m1<m2)?m1:m2;
return m1;
}