被sdfz踩爆了!

  %%%kai586123

  %%%Gekoo

  %%%sdfz_yrt

  

  T1

    我以为是水题!一直在肝!

    而且为什么每次我的考场暴力都是考后才调出来啊!!

    先记录一下正解的大神做法:

      按顺序考虑每次出牌,每次要出使总胜数不变的最大的牌

      考虑将a和b的牌放在一起排序,那么这个问题变成了:括号匹配

      那么考虑对于一个左括号,每次找一个最靠右的右括号与他匹配(或不匹配),还使得总对数不变

      如果找到的右括号在它右边,那么如果找到的当前位置i的右括号导致对数减少,找到更右的位置i+k一定也导致对数减少

      这点可以直观理解,因为i位置导致对数减少,说明左侧的左括号找不到任何替代的右括号,也说明右侧没有任何“空闲”的括号

      所以出牌的大小对对数的影响有可二分性,问题变成了如何快速维护剩余对数

      Rockstar_B:线段树维护分治

      考虑在值域线段树上维护对数,给每个节点维护2个变量sum[2]和pair表示这个值域区间里“空闲”左括号和右括号的数量和匹配数

      修改后递归回来维护:

      int now=min(sum[lch][0],sum[rch][1]);

      pair[x]=pair[lch]+pair[rch]+now;

      sum[x][0]=sum[lch][0]+sum[rch][0]-now;

      sum[x][1]=sum[lch][1]+sum[rch][1]-now;

      最后对数就是 pair[1]

    然后记录下弱智的暴力做法。

      同样是括号匹配,需要被满足的左括号p两端的答案分别单调

      那么找到的右括号应该满足什么样的性质呢?

      考虑找到的右括号本来就和左括号匹配,那么应该是可以与之匹配的最靠右的那一个

      如何找到,把左括号视为+1,右括号视为-1,那么从头开始跑这个过程,到了p之后的一个位置减为了0

      那么这个0就是最后一个可以被拿走的右括号。原因是,再拿右边的,将导致这个0减为-1,也就是增加了一对失配,对数减少了。

        

      考虑右括号没和左括号匹配,这种右括号就是找不到左括号匹配那种,也就是说跑了一遍+1-1之后,它所在的位置应该为负数(虽然强制赋成0)

      一个比较优的暴力做法就是,先跑一遍+1-1的括号匹配,把所有的失配右括号塞到堆里,并标记不再进堆

      按出牌顺序枚举左括号,首先取出堆顶最优的第二种括号,再暴力找第一种括号,两者取一个max作为此次的手牌

      然后删除这两个括号,重新维护+1-1的前缀和序列。就是从修改的地方开始重新跑。

      再加一个剪枝,如果跑到一个地方发现你求出来的真实值和它原本的值相同,就不用跑了,因为可以想到再跑也不会再有更新了。

  T2

    最大值不好搞,把最小值扔到两边。

  T3

    差分表。

    更细节的我也不会,本题用到了一些性质

    差分表中的差分值具有单调性,即大的差分值一定出现在序列较靠前的位置

    差分表中的k个元素一定作用于序列的前k个元素

    

    于是这些差分值可以用一个堆维护。

    另一个学到的地方是dfs+set建树。

CSPS_103的更多相关文章

随机推荐

  1. VirtualBox 启动时提示“获取 VirtualBox COM 对象失败”的解决

    昨天给电脑打了一堆补丁和更新,今天启动 VirtualBox 的时候提示 “获取 VirtualBox COM 对象失败”,好在百度到了 CSDN 上的一篇文章解决了这个问题. 错误详情 “获取 Vi ...

  2. oracle表空间不足:ORA-01653: unable to extend table

    问题背景: oracle表空间不足报错是比较常见的故障,尤其是没有对剩余表空间做定期巡检的系统: 报错代码如下: oracle表空间不足错误代码:ORA-01653: unable to extend ...

  3. 【TencentOS tiny】深度源码分析(3)——队列

    队列基本概念 队列是一种常用于任务间通信的数据结构,队列可以在任务与任务间.中断和任务间传递消息,实现了任务接收来自其他任务或中断的不固定长度的消息,任务能够从队列里面读取消息,当队列中的消息是空时, ...

  4. CyclicBarrier 是如何做到等待多线程到达一起执行的?

    我们有些场景,是需要使用 多线各一起执行某些操作的,比如进行并发测试,比如进行多线程数据汇总. 自然,我们可以使用 CountDownLatch, CyclicBarrier, 以及多个 Thread ...

  5. Road Construction

    King Mercer is the king of ACM kingdom. There are one capital and some cities in his kingdom. Amazin ...

  6. 线程池和lambda表达式

    线程池1.什么是线程池.一个用来创建和管理线程的容器;2.线程池的作用.提高线程的复用性,降低资源消耗提高线程的响应速度,提高线程的可管理性3.线程的核心思想;线程的复用 4.线程池的创建Execut ...

  7. http服务端架构演进

    摘要 在详解http报文相关文章中我们介绍了http协议是如何工作的,那么构建一个真实的网站还需要引入组件呢?一些常见的名词到底是什么含义呢? 什么叫正向代理,什么叫反向代理 服务代理与负载均衡的差别 ...

  8. 最简单的ArcGIS Engine应用程序(中)

    上一篇中只能添加代码中指定的shp文件(最简单的ArcGIS Engine应用程序(上)) 为了让用户可以浏览磁盘加载指定的shp文件,需做一下调整. 从工具箱往窗体上添加一个OpenFileDial ...

  9. 爬虫破解知乎登入(不使用Selenium模块)

    一.分析 知乎完成登入的步骤 首先获得cookies(如果不获得后面验证码无法获得) 获得验证码 提交登入相关内容 前两步简单稍微细心寻找规律即可 其中最难的是第三步应该他前端进行了js加密 这里没什 ...

  10. Django跨域问题(CORS错误)

    Django跨域问题(CORS错误) 一.出现跨域问题(cors错误)的原因 通常情况下,A网页访问B服务器资源时,不满足以下三个条件其一就是跨域访问 协议不同 端口不同 主机不同 二.Django解 ...