博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

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]$

 

posted @ 2021-11-26 23:59  gllonkxc  阅读(103)  评论(0编辑  收藏  举报