把第 48 行的 freopen 删了就挂了。
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int N = 10;
char IFN[10] = "00_in.txt";
char OFN[11] = "00_out.txt";
int a[N];
int min(int a, int b) {
return a < b ? a : b;
}
void gen_data() {
freopen(IFN, "w", stdout);
a[0] = rand();
for (int i = 1; i < N; i++) {
if ((rand() & 1) == 1) {
a[i] = a[i - 1] + 1;
} else {
a[i] = a[i - 1] - 1;
}
}
int min_val = 0x7fffffff;
for (int i = 0; i < N; i++) {
min_val = min(min_val, a[i]);
}
for (int i = 0; i < N; i++) {
a[i] -= min_val;
printf("%d ", a[i]);
}
putchar(10);
for (int i = 0; i < N; i++) {
int l = ((rand() << 15) | rand()) % N + 1;
int r = ((rand() << 15) | rand()) % N + 1;
if (l > r) {
l ^= r ^= l ^= r;
}
printf("%d %d\n", l, r);
}
}
int f[N][20];
int max(int a, int b) {
return a > b ? a : b;
}
void gen_answer() {
freopen(IFN, "r", stdin);
freopen(OFN, "w", stdout); // 就是这里
for (int i = 0; i < N; i++) {
scanf("%d", f[i]);
}
for (int j = 1; j < 20; j++) {
for (int i = 0; i + (1 << j) - 1 < N; i++) {
f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
}
}
for (int l, r, q, i = 0; i < N; i++) {
scanf("%d %d", &l, &r);
l--;
r--;
q = log2(r - l + 1);
printf("%d\n", max(f[l][q], f[r - (1 << q) + 1][q]));
}
}
int main() {
gen_data();
gen_answer();
// for (int i = 0; i < 20; i++) {
// fprintf(stderr, "---- 开始生成第 %d 组数据 ----\n", i + 1);
// IFN[0] = (i / 10) + '0';
// OFN[0] = (i / 10) + '0';
// IFN[1] = (i % 10) + '0';
// OFN[1] = (i % 10) + '0';
// srand((i << 1) + (i >> 9) + (i & 19) + (i | 19) + (i ^ 810));
// clock_t t1 = clock();
// gen_data();
// clock_t t2 = clock();
// fprintf(stderr, "输入数据生成完成, 耗时 %lf s.\n", (t2 - t1) / 1000.0);
// gen_answer();
// clock_t t3 = clock();
// fprintf(stderr, "输出数据生成完成, 耗时 %lf s.\n", (t3 - t2) / 1000.0);
// }
return 0;
}