Pagini recente » Cod sursa (job #889478) | Cod sursa (job #2607845) | Cod sursa (job #1609568) | Cod sursa (job #1778377) | Cod sursa (job #703666)
Cod sursa(job #703666)
#include<stdio.h>
int log2[100100],M[21][100010],n,m;
FILE *f=fopen("rmq.in","r");
void citire()
{
fscanf(f,"%d%d",&n,&m);
for(int i=1;i<=n;++i)
fscanf(f,"%d",&M[0][i]);
}
int minim(int a,int b)
{
if(a<b) return a;
return b;
}
void matrice()
{
log2[0]=log2[1]= 0;
for(int i=2;i<=n;++i)
log2[i] = log2[ i >> 1] + 1;
for(int i=1;(1<<i) <= n; ++i)
for(int j=1; j+(1<<(i-1)) <= n; ++j)
M[i][j] = minim ( M[i-1][j], M[i-1][j + (1<<(i-1))] );
}
int main()
{
citire();
int x,y,L;
FILE *g=fopen("rmq.out","w");
matrice();
for(int i=1;i<=m;++i)
{
fscanf(f,"%d%d",&x,&y);
L = log2[y-x+1];
fprintf(g,"%d\n",minim(M[L][x],M[L][y - (1<<L) +1]));
}
fclose(f);
fclose(g);
return 0;
}