Loading

ARC184C 做题记录

link

我们考虑所有编号为奇数的折痕,其形如 VMVMVM...,其中 V 表示下凹,M 为上凸。这个可以证明:

  • 归纳证明。考虑第一个折痕,其在最后一次对折时产生,显然为 V

  • 假设前 \(2^c - 1\) 条奇数编号的折痕形如 VMVMVM...,第 \(2^c\) 条折痕会将前面这些折痕对称过去并取反(例如会在 VMVMVMV 末尾接上 MVMVMVMV,变为 VMVMVMVMVMVMVMV),因此前 \(2^{c+1} - 1\) 条奇数编号的折痕也满足这个结构。

类似的,我们可以推广这个结论:对于任意一个 \(c(0\le c\le 99)\),拎出所有编号的 lowbit 为 \(2^b\) 的折痕,它们的结构形如 VMVMVM...。证明可以考虑忽略所有 lowbit 小于 \(2^c\) 的折痕,就是上面的结论。

接下来回到原问题,我们首先对 \(a_{1...n}\) 分类,分成奇数和偶数两类。

\(k\)\(a_{1...n}\) 需要加的增量。如果 \(k\) 为奇数,则 \(a\) 中的偶数的贡献可以确定;如果 \(k\) 为偶数,则 \(a\) 中的奇数的贡献可以确定。

\(k\) 为偶数时,为了确定贡献是 \(0\) 还是 \(1\),我们还需要对 \(\frac {k} 2\) 的奇偶性即 \(k \bmod 4 = 2\)\(k \bmod 4 = 0\) 进行分类讨论。当 \(k \bmod 4 = 0\) 时,贡献为 \(\sum\limits_{i = 1} ^ n [a_i \bmod 4 = 3]\);当 \(k \bmod 4 = 2\) 时,贡献为 \(\sum\limits_{i = 1} ^ n [a_i \bmod 4 = 1]\)

\(f(a, u)\) 为对于给定的 \(a\) 序列,满足 \(k \bmod 2 = u\) 的答案。当 \(u = 0\)\(k\) 为偶数时,我们还需要求所有偶数组成的序列答案,设 \(b\) 序列为 \(a\) 中所有偶数除以二组成的序列。注意有个隐性条件:当 \(k \bmod 4 = 0\) 时,从 \(f(b, 0)\) 处转移过来;当 \(k \bmod 4 = 2\) 时,从 \(f(b, 1)\) 处转移过来。

\(u = 1\) 的情况是类似的。当递归层数达到 \(\log_2 a\) 时可以直接返回,每个数至多被遍历 \(O(\log a)\) 次,时间复杂度 \(O(n\log a)\)

  • 启示:先观察必要的东西,找到必要的性质利于下一步,然后是这种二进制递归形式的 trick
点击查看代码 ```cpp #include #define ll long long #define fi first #define se second #define mkp make_pair #define pir pair #define pb emplace_back #define i128 __int128 using namespace std; const ll maxn = 1010, inf = 1e18; ll n, a[maxn], b[maxn]; pir solve(ll d, ll l, ll r) { if(l > r) return mkp(0, 0); if(d == 1) return mkp(-inf, r - l + 1); ll cnt[4] = {}, pl = l, pr = r; for(ll i = l; i <= r; i++) { if(a[i] & 1) b[pl++] = a[i]; else b[pr--] = a[i]; ++cnt[a[i] & 3]; } for(ll i = l; i <= r; i++) a[i] = b[i] >> 1; pir x = solve(d - 1, l, pl - 1), y = solve(d - 1, pr + 1, r); pir ret; ret.fi = max(cnt[2] + x.fi, cnt[0] + x.se); ret.se = max(cnt[3] + y.se, cnt[1] + y.fi); return ret; } int main() { scanf("%lld", &n); for(ll i = 1; i <= n; i++) scanf("%lld", a + i); pir ret = solve(100, 1, n); printf("%lld", max(ret.fi, ret.se)); return 0; } ```
posted @ 2024-09-27 10:05  Lgx_Q  阅读(3)  评论(0编辑  收藏  举报