Pagini recente » Cod sursa (job #305207) | Cod sursa (job #1290287) | Cod sursa (job #2358106) | Cod sursa (job #2543157) | Cod sursa (job #1700905)
#include <stdio.h>
#define MAX_N 100000
#define MAX_LOGN 16
int rmq[1+MAX_N][MAX_LOGN];
int logn[1+MAX_N], p2[MAX_LOGN];
void puteri() {
int maxP2, exp, i;
maxP2 = 2;
exp = 0;
for(i = 1; i <= MAX_N; i++) {
if(i == maxP2) {
p2[exp] = maxP2 / 2;
maxP2 *= 2;
exp++;
}
logn[i] = exp;
}
}
int min(int a, int b) {
if(b < a)
return b;
return a;
}
int main() {
int n, i, q, j, x, y, bestLog;
puteri();
FILE *fin = fopen( "rmq.in" , "r" );
fscanf(fin, "%d%d", &n, &q);
for(i = 1; i <= n; i++)
fscanf(fin, "%d", &rmq[i][0]);
for(j = 1; j <= logn[n]; j++)
for(i = 1; i <= n - p2[j] + 1; i++)
rmq[i][j] = min(rmq[i][j - 1], rmq[i + p2[j - 1]][j - 1]);
FILE *fout = fopen( "rmq.out" , "w" );
for(i = 1; i <= q; i++) {
fscanf(fin, "%d%d", &x, &y);
bestLog = logn[y - x + 1];
fprintf(fout, "%d\n", min(rmq[x][bestLog], rmq[y - p2[bestLog] + 1][bestLog]));
}
fclose( fin );
fclose( fout );
return 0;
}