Pagini recente » Cod sursa (job #1616060) | Cod sursa (job #2091830) | Cod sursa (job #1775857) | Cod sursa (job #1004267) | Cod sursa (job #2181476)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
int main()
{ int N, Q, i, j;
scanf("%d", &N);
scanf("%d", &Q);
int lg = log2(N);
int** d=(int**)malloc((lg+1)*sizeof(int*));
for(i = 0; i < lg+1; i++)
{
d[i] =(int*)malloc((N+1)*sizeof(int));
}
for(j = 1; j <= N; j++)
{
scanf("%d", &d[0][j]);
}
int x = 1;
for( i = 1; i <= lg; i++ )
{
for(j = 1; j < 2*x; j++)
{
d[i][j] = d[i-1][j];
}
for(; j <= N; j++)
{
d[i][j] = min(d[i-1][j], d[i-1][j - x]);
}
x*=2;
}
int* putere =(int *)malloc((N+2)*sizeof(int));
putere[1] = 0;
putere[0] = 0;
for( i = 2; i <= N; i++)
{
putere[i] = putere[i/2] + 1;
}
for(i = 0; i < Q; i++)
{
int l , r;
scanf("%d %d", &l, &r);
int len = r - l + 1;
int p = putere[len-1];
int valPutere = (1<<p);
printf("%d", min(d[p][r], d[p][l + valPutere - 1]));
}
free(putere);
for(i = 0; i < lg+1; i++)
free(d[i]);
free(d);
return 0;
}