2023.8.10 AT practise
ARC065F
非常抽象。
ARC066D
我们知道 \(a+b=a\space xor \space b+2(a\wedge b)\)
考虑到若 \(u=a \space xor \space b,v=a+b\)
那么 \(v\ge u\).
我们只要统计所有 \(v\),\((v,u)\) 的个数求和即可。
注意到若 \((u,v)\) 合法,那么 \((2u,2v)\)、\((2u,2v+2)\)、\((2u+1,2v+1)\) 合法。
记 \(f(n)\) 表示 \(v=n\) 时合法数对,则 \(f(n)=f(n/2)+[x是偶数]f(n/2-1)\).
答案是 \(F(n)=\sum_{0\le i\le n}f(n)\).
则 \(F(n)=\sum_{0\le i\le n}f(n/2)+\sum_{1\le i\le n}[i是偶数]f(n/2-1)\)
\(F(n)=[n是偶数] f(n/2)+2F((n-1)/2)+F(n/2-1)\)
\(F(n)=F(n/2)+F((n-1)/2)+F(n/2-1)\).
\(F(0)=1\).
ARC066E
首先发现括号不可能加在加号后面,考虑加在减号后面。
若减号后加了括号,那么在这个括号后的第一个减号后的数都是正贡献。
\(a_1-(a_2+a_3-(a_4+a_5)-a_6)\).
其中 \(a_4\sim a_6\) 都是正的贡献了。
枚举哪里加了第一个减号即可。
ARC066F
首先斜率优化计算出 \(f(i),g(i)\) 表示从左到右,从右到左的贡献的最大值。
设 \(h(i)\) 表示必须选第 \(i\) 个的贡献。
考虑替换掉第 \(i\) 个饮料为 \(x\),我们只需考虑 \(\max(f(i)+g(i+1),h(i)-x)\) 即可。
记一个长度为 \(len\) 的区间贡献为 \(v(len)=\frac{1}{2}len*(len+1)\).
至于 \(h(i)\),就是求一个区间 \([L,R]\),满足 \(i\in [L,R]\),且 \(f(L)+g(R)+v(R-L+1)-\sum_{i=L}^R a_i\) 最大即可。
处理区间,我们使用分治。