boolwork(int lft, int rht)// 双指针 { if (lft > rht) returnfalse; // 特判 int cnt = 0; for (int l = 1, r = 1, i = n; i >= 1; i --) { while (l <= n && b[i] + b[l] < lft) l ++; while (r <= n && b[i] + b[r] <= rht) r ++; cnt += r - l - (l <= i && i < r); // 当 i 在 l 和 r 之间时不可被统计 } return (cnt >> 1) & 1; // 注意重复统计 }
1 2 3 4 5 6 7 8 9 10 11 12 13 14
signedmain() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin >> n; for (int i = 1; i <= n; i ++) cin >> a[i]; for (int k = 0; k < 26; k ++) ans += solve(k) << k; // 第 k 位的贡献为 (1 << k) cout << ans << '\n'; return0; }