「POI 2015」WIL-Wilcze doły
假设选中区间
显然得选满
所以对于区间
当然是用线段树维护啦
学数据结构果然会变傻
发现可以用单调队列维护最大子段和
然后发现若是区间
然后就是一道 two-pointer 的题了
假设选中区间
显然得选满
所以对于区间
当然是用线段树维护啦
学数据结构果然会变傻
发现可以用单调队列维护最大子段和
然后发现若是区间
然后就是一道 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 |
|
尽量充分利用状态,降低复杂度,另外一道题
状态设计比较巧妙
跑一个背包
找方案比较麻烦,如果直接记由哪个状态转移来是不行的,因为后续更新会破坏
所以要搞一个类似链表的东西
这是一个贪心+线段树的解法,复杂度是
把要求按
其他题解怎么都是一个一个跳的,复杂度不会挂吗?
线段树部分写得比较神奇
上帝手中有
现在,上帝要把它们中的一部分投放到一个新的空间中去建造世界。
为了世界的和平与安宁,上帝希望所有被投放的世界元素都有至少一个没有被投放的世界元素限制它。
上帝希望知道,在此前提下,他最多可以投放多少种世界元素?
感觉网上的贪心题解都稍有问题?
单纯考虑一个树(不是基环树),发现可直接从子节点贪心得出父节点状态
首先,这是一个内向树森林
考虑一颗内向基环树
对每一个环上节点和其子树分开执行贪心(这只是描述,实际上用拓扑排序递推)
贪心过程由拓扑排序执行,讨论 2 可以直接在这个过程中完成
仔细分析,考虑树上,若断一条树边
如何快速计数?
记附加边为
即,附加边
或者说,附加边
然后就是树上边差分
POJ 上 TLE 了,但是本地没问题,复杂度(应该)没挂?
容易发现,若不加新边,则总距离为
发现
发现
若相交,则需要经过重叠部分两次,可以通过把边权改成
对于新边能走一次,可以用,不实际在图上加边,来控制