Pagini recente » Istoria paginii utilizator/blidarrares86 | Atasamentele paginii Profil vladvaculin | Diferente pentru utilizator/mocalinno intre reviziile 28 si 36 | Diferente pentru utilizator/andu9 intre reviziile 7 si 26 | Cod sursa (job #1197711)
#include <cstdio>
FILE*f=fopen("rmq.in","r");
FILE*h=fopen("rmq.out","w");
int lg[100001],r[18][100001],v[100001];
inline int min(int a,int b){
if ( a<b )return a;
return b;
}
int main(){
int n,m,k=0;
fscanf(f,"%d%d",&n,&m);
for ( int i=1;i<=n;++i ){
fscanf(f,"%d",&v[i]);
if ( (2<<k)<=i )
++k;
lg[i]=k;
r[0][i]=v[i];
for ( int j=1;j<=lg[i];++j )
r[j][i]=min(r[j-1][i],r[j-1][i-(1<<(j-1))]);
}
for ( int i=1;i<=m;++i ){
int x,y;
fscanf(f,"%d%d",&x,&y);
int L=lg[y-x+1];
fprintf(h,"%d\n",min(r[L][y],r[L][x+(1<<L)-1]));
}
return 0;
}