Codeforces Round #757 (Div. 2)
solved: 4/5
A:
贪心, 从小到大拿, 在范围内就拿, 直到拿不了位置
这个n就100是不是想吓唬我
B:
贪心, 把次数拉出来, 优先分配1的给他, 可以注意到1可以分配两次, 2可以分配两次……
然后把x0放在1..n+1的中心就可以了
C:
拆位考虑, 对于第k位(从低到高), 假设上面有cnt个1, 那肯定有n-cnt个0
要使子序列的异或值为1, 那么肯定是由奇数个1和若干个0组成
那么也就是从挑奇数个1搭配若干个0, 答案是$2^{cnt-1}2^{n-cnt}=2^{n-1}$
这一位为1, 实际上是$2^k$
然后考虑一下, 构造原序列
她说l..r的or值为x, 那么假设x的第k位为1, 则第k位上至少有一个1, 1的数目我们是不关心的, 只要关心有没有就够了
D:
观察那个式子, 定义$a[i]=gcd(a_1,a_2..a_i)$
可以发现$a[i+1]|a[i]$
那么就好办了, 定义f[i]为以i为gcd结尾的最大长度, g[i]表示以i结尾的最大和
那么从i|j处转移, j是i的倍数, g[j]+1..g[i]上都放i, 贡献是i*(g[i]-g[j])
可以发现f[i]就是i的倍数的数目,
ai 2e7, 但是n只有1e5, 所以与其用调和级数, 不如直接根号分解
注意存一下因子, 可能他没有在序列中出现过, 但是转移要用
比如6 8的因子是2
绝杀D2的时候太紧张把D2交到D1上亏了300多分捏QAQ, 还好D2最后得了300多分补回来了, 但是跟我没写D2有什么区别呢QAQ
补题: 1/1
E:
动态开点线段树板子题
一开始的序列是$a[i]=i \ 0\leq i\leq 10^9$
用线段树来维护这个序列
可以发现每多一天,当天温度为T, 就是对所有值为$[1,T-1]$的数都+1, 对值为$[T+1,10^9]$的数都-1
可以发现, 如果如果一开始温度x<y, 那么经过多天的变换后肯定有$Tx\leq Ty$
那么线段树动态开点维护每个点的值就可以了, 维护区间最小最大值, 然后二分找到最右的一个<Ti的点L, 最左的一个>T的点R
如果找不到, 就不修改, 找得到就修改$[0,L]$ $[R,10^9]$