我有一个朋友,值域分块大小开的 s[i] 中的最大值,样例都没过,结果 AC 了……
题目描述中说到 1≤a≤b≤n,如果值域没有开够的话就应该会导致错误,但是实际上没有。
加强建议:将 s[i] 中的最大值设置为小于 n ,但是询问中的 a,b 可以达到 n。(顺便多加几组数据吧)
数据生成器:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <ctime>
#include <cmath>
using namespace std;
const int N = 1000010;
int random(int n) {
return (long long)rand() * rand() % n;
}
int a[N];
int main() {
freopen("data.in", "w", stdout);
srand((unsigned)time(0));
int n = random(1e5) + 1, m = random(1e6) + 1;
printf("%d %d", n, m);
puts("");
for(int i = 1; i <= n; i++) a[i] = random(n - 25) + 1; //
for(int i = 1; i <= n; i++) printf("%d ", a[i]);
puts("");
int l, r, vl, vr;
for(int i = 1; i <= m; i++) {
l = random(n) + 1;
r = random(n) + 1;
vl = random(n) + 1;
vr = random(n) + 1;
if(l > r) swap(l, r);
if(vl > vr) swap(vl, vr);
printf("%d %d %d %d\n", l, r, vl, vr);
}
return 0;
}
望采纳,谢谢!