Pagini recente » Statistici Ordace Anamaria (amymaria) | Cod sursa (job #2446880) | Profil sandupetrasco | Cod sursa (job #1669748) | Cod sursa (job #154932)
Cod sursa(job #154932)
#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*=2;
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[2*j]<a[2*j+1])?a[2*j]:a[2*j+1];
s[j]=s[2*j]; d[j]=d[2*j+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(st<=s[poz]&&d[poz]<=dr) return a[poz];
if(dr<s[poz]||st>d[poz]) return inf;
m1=query(2*poz);
m2=query(2*poz+1);
m1=(m1<m2)?m1:m2;
return m1;
}