神奇的无旋 Treap ── FHQ-Treap
本文将介绍一种平衡树
复杂度我不会证
实现非常简单
本文将介绍一种平衡树
复杂度我不会证
实现非常简单
我好弱啊
这一题只想到递推 DP
又没有想出正解
到现在还是这么菜
NOIP 2019 如何 500+
首先发现
令
称贝壳的种类为颜色
考虑离线做法,将询问按照
发现只需要维护每个颜色的目前最右出现位置(
每个颜色只在最后出现的地方进行统计,显然可以保证最优(因为离线)
举个例子
1 | 颜色序列为 |
0/1 序列用树状数组维护即可,答案即是 0/1 序列
在线做法,用可持久化线段树即可
假设选中区间
显然得选满
所以对于区间
当然是用线段树维护啦
学数据结构果然会变傻
发现可以用单调队列维护最大子段和
然后发现若是区间
然后就是一道 two-pointer 的题了
带修改最大子段和查询
考虑维护一棵线段树,节点
可以非常方便地合并
然后考虑查询区间
(el, er)
,更新 ans
q(ls)
q(rs)
ans
一开始觉得
因为若 ans
,反证法可证
因为
于是考虑对
通过在递归过程中判断实现
所以线段树维护区间和与区间最大
辣鸡 BZOJ 评测机,笔记本都只要跑 300ms,在你的老爷 CPU 上直接 TLE
这是一道树形 DP
首先是状态设计,由于用户人数相比耗费作为数组维度比较简单,所以这样设计
考虑节点
把子节点的状态看成一种物品,就是分组背包了
外层倒序枚举
1 | per(i, s, 1) |
复杂度不知道怎么证
观察
发现一个绝对值在外,一个绝对值在里
类似的
只要令
就可满足
例如
1 3 12 11 10 9 8 7 6 5 4 2
1 |
|
尽量充分利用状态,降低复杂度,另外一道题
状态设计比较巧妙
跑一个背包
找方案比较麻烦,如果直接记由哪个状态转移来是不行的,因为后续更新会破坏
所以要搞一个类似链表的东西
这是一个贪心+线段树的解法,复杂度是
把要求按
其他题解怎么都是一个一个跳的,复杂度不会挂吗?
线段树部分写得比较神奇