Pagini recente » Cod sursa (job #409463) | Cod sursa (job #1284800) | Cod sursa (job #195600) | Cod sursa (job #765596)
Cod sursa(job #765596)
#include <stdio.h>
FILE *in, *out;
long int RMQ[18][100001];
int N, M;
int main()
{
int i, j, k;
long int min;
in = fopen("rmq.in", "r");
out = fopen("rmq.out", "w");
fscanf(in, "%d %d", &N, &M);
for(i = 1; i <= N; ++i)
fscanf(in, "%ld", &RMQ[0][i]);
for(i = 1; (1 << i) <= N; i++)
for(j = 1; j + (1 << i) - 1 <= N; j++)
if(RMQ[i-1][j] <= RMQ[i-1][j + (1 << (i-1))])
RMQ[i][j] = RMQ[i-1][j];
else
RMQ[i][j] = RMQ[i-1][j + (1 << (i-1))];
for(; M; --M)
{
fscanf(in, "%d %d", &i, &j);
for(k = 0; (1 << k) <= (j - i + 1); ++k); k--;
if(RMQ[k][i] <= RMQ[k][j - (1 << k) + 1]) min = RMQ[k][i];
else min = RMQ[k][j - (1 << k) + 1];
fprintf(out, "%ld\n", min);
}
fclose(in);
fclose(out);
return 0;
}