[CodeForces1000]F. One Occurrence

一道有意思的线段树题目,维护一个pair值(下一个元素的位置,权值)对其维护最大值(就是影响越持久)
把问题离线处理,按照问题的右端点排序,这样就能满足单调性
输出的时候一定要判断一下first的值是否符合要求
注意:

  • 这棵线段树维护的是最大值,不管是修改还是查询都需要取max
  • 如果没有nxt,数组的值要赋值为n+1

阅读更多

[CodeForces1000]C. Covered Points Count

区间前缀和的经典问题,离散化后求前缀和(值即为覆盖的条数),用离散化之前的值直接计算即可
注意:

  • 离散化后的值有$2n$个,sum数组和b数组要开n的两倍
  • 只需要对L和R+1进行离散化就可以了,但记住取lower_bound的时候也要取R+1的排名,所以算前缀和的时候是–sum[y]而不是–sum[y+1]
  • 相邻两个端点的值不相同,在最后计算ans的时候只能算一边!

阅读更多

[CodeForces1000]B. Light It Up

一道贪心的简单题,插入无非就是两种情况:

  • 在开灯的区间内插入,应该让插入的元素尽可能地靠后
  • 在关灯的区间内插入,应该让插入的元素尽可能地靠前

注意:

  • g1和g2的含义,g1是指不落单(最后两次操作刚好完成一次开关)的后缀和,而g2则指的是会落单的后缀和
  • i+1和i+2的选择,应该在纸上画图而不是凭空乱想
  • 因为n的奇偶性不知道,所以ans的初始值为末尾两个数的最大值

阅读更多

solution-code2050

相信大家一眼就看出是二分答案的模板题,问题就是如何检验是否可行
我们先求出最小的能够包含所有点的矩形,暴力选取四个角分别覆盖,再这样操作一次,检验最后一个矩形的大小就可以了
注意覆盖完成后要恢复到初始状态!!

阅读更多