Mai intai trebuie sa te autentifici.
Cod sursa(job #155007)
Utilizator | Data | 11 martie 2008 17:30:12 | |
---|---|---|---|
Problema | Range minimum query | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.6 kb |
#include<stdio.h>
long n,m,i,a[17][100001],ll[100001],l,t,j,x,y,m1,m2;
int main()
{ FILE *f=fopen("rmq.in","r"),
*g=fopen("rmq.out","w");
fscanf(f,"%ld%ld",&n,&m);
for(i=1;i<=n;i++) fscanf(f,"%ld",&a[0][i]);
l=2;
while(l<=n)
{ j++; ll[l]=1;
for(i=1;i<=n-l+1;i++) a[j][i]=(a[j-1][i]<a[j-1][i+(l>>1)])?a[j-1][i]:a[j-1][i+(l>>1)];
l<<=1;
}
for(i=1;i<=n;i++) ll[i]+=ll[i-1];
for(t=1;t<=m;t++)
{ fscanf(f,"%ld%ld",&x,&y);
i=ll[y-x+1]; l=1<<i;
m1=a[i][x]; m2=a[i][y-l+1];
m1=(m1<m2)?m1:m2;
fprintf(g,"%ld\n",m1);
}
fcloseall();
return 0;
}