CSPS_103
被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的更多相关文章
随机推荐
- DrawerLayout(抽屉效果)
DrawerLayout是V4包下提供的一种左滑右滑抽屉布局效果. 实现效果如下: 因为是官方提供的,所以使用起来也相对的比较简单. DrawerLayout 提供 1.当界面弹出的时候,主要内容区会 ...
- 分库分表(4) ---SpringBoot + ShardingSphere 实现分表
分库分表(4)--- ShardingSphere实现分表 有关分库分表前面写了三篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理论) 3.分库 ...
- MySQLdb操作数据库
堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: + ...
- deferred对象和promise对象(二)---deferred对象
早上醒来,继续讨论deferred对象和primise对象. deferred对象的的方法: 1.$.Deferred()-----生成一个deferred对象 2.deferred.done()-- ...
- e课表项目第二次冲刺周期第十天
昨天完成了什么? 昨天还有一天第一次冲刺周期就结束了,我们的工作也接近尾声了,所以今天我利用之前的方法,完成了对监听的设置,以及对修改界面的编写,可以实现相应的删除和修改的功能,然后我和我们组的成员商 ...
- .NET进阶篇03-Reflection反射、Attribute特性
知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂 内容目录 一.概述二.反射1.反射使用2.创建对象3.调用方法4.字段属性三.特性四.总结 一.概述 反射其实无处不在,我们用VS进行调试时候, ...
- VM虚拟机启动夜神模拟器卡99%解决办法
VM虚拟机启动夜神模拟器卡99%解决办法 本人出现的情况: 物理机装的是win7系统,安装了vmware14(安装过程未出现报错),在vmware14 上 win10系统(安装过程未出现报错),安装夜 ...
- Beautiful Soup 4.2.0 文档(一)
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时 ...
- Python_MySQL数据库的写入与读取
[需求]1. 在数据库中创建表,且能按时间自动创建新表 2. 数据写入数据库 3. 从数据库读取数据 1. 创建表,并自动更新 def Creat_Table(InitMySQL,tabel_name ...
- Bran的内核开发教程(bkerndev)-01 介绍
介绍 内核开发不是件容易的事,这是对一个程序员编程能力的考验.开发内核其实就是开发一个能够与硬件交互和管理硬件的软件.内核也是一个操作系统的核心,是管理硬件资源的逻辑. 处理器或是CPU是内核 ...