Pagini recente » Cod sursa (job #1603195) | Cod sursa (job #1140088) | Cod sursa (job #2567410) | Cod sursa (job #3289682) | Cod sursa (job #246287)
Cod sursa(job #246287)
#include <stdio.h>
const int oo = 1<<30;
int a[100000], ms[1000];
int min(int a, int b) {
if (a > b)
return b;
return a;
}
int main(int argc, char *argv[]) {
int n, m, i, j, l, u, mn, c;
FILE *fi = fopen("rmq.in", "r");
fscanf(fi, "%d %d", &n, &m);
for (i = 0; i < n; ++i)
fscanf(fi, "%d", a+i);
for (mn = 0; mn*mn < n; ++mn)
;
--mn;
for (i = 0; i*mn < n; ++i) {
ms[i] = oo;
for (j = i*mn; (j < (i+1)*mn) && (j < n); ++j)
ms[i] = min(ms[i], a[j]);
}
/* for (i = 0; i < n; ++i)
printf("%d ", a[i]);
printf("\n");
for (i = 0; i*mn < n; ++i)
printf("%d ", ms[i]);
printf("\n"); */
FILE *fo = fopen("rmq.out", "w");
while (m--) {
fscanf(fi, "%d %d", &l, &u);
--l, --u;
/* printf("%d..%d: ", l, u); */
c = oo;
for (i = 0; i*mn < l; ++i)
;
for (j = l; j < i*mn; ++j) {
c = min(c, a[j]);
/* printf("%d ", a[j]); */
}
/* printf("| "); */
for (; i*mn <= u; ++i) {
c = min(c, ms[i]);
/* printf("%d ", ms[i]); */
}
/* printf("| "); */
for (j = i*mn; j <= u; ++j) {
c = min(c, a[j]);
/* printf("%d ", a[j]); */
}
fprintf(fo, "%d\n", c);
}
fclose(fo);
fclose(fi);
return 0;
}