摘要: BZOJ 2753 首先可以按照题目要求的把所有的有向边建出来,然后进去广搜就可以求出第一问的解,然后考虑如何求解第二问,我们把所有搜到的边按照到达的点的高度位第一关键字,边的长度为第二关键字排序之后跑$kruskal$,这样子得到的最小生成树权值就是第二问所求的最大值。 考虑一下这样子为什么正确, 阅读全文
posted @ 2018-10-22 20:15 CzxingcHen 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 初赛成绩出了,和预想的一样,一分都没挂,开心。 大佬的博客 subtask 1 ($n \leq 200$) 因为高位取$0$一定比高位取$1$优,我们考虑按照位从高到低进行检验,设$f_{i, j}$表示前$i$个数划分成$j$段是不是可行,在转移的时候要注意不能让之前计算过的高位从$0$变成$1 阅读全文
posted @ 2018-10-22 18:13 CzxingcHen 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 第一次写线段树优化建边。 根据本题的要求,我们可以建两棵线段树,然后在建$n$个点,然后把第一棵线段树上每一个点$(p, l, r)$(结点编号为$p$, 表示区间是$[l, r]$),连边$\forall i \in [l, r]\ (i, p, 0)$,与之相对,把第二棵线段树上的点$(p, l 阅读全文
posted @ 2018-10-22 15:13 CzxingcHen 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 简单题。 考虑没有修改数字的条件的限制,我们直接用双指针扫描就可以计算出答案了。 然后考虑加入修改数字的条件,只要用单调队列维护出当前两个指针表示的区间中长度为$d$的一段区间的最大值,用总和减掉这个最大值更新答案即可。 时间复杂度$O(n)$。 Code: #include <cstdio> #i 阅读全文
posted @ 2018-10-22 14:11 CzxingcHen 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 一开始看不懂题解,看懂了题解之后觉得还是挺妙的。 好多题解里都提到了HH的项链,但是我觉得关系并不大啊…… 先把所有询问离线下来按照右端点排序,按照询问的要求一个一个加入数字,怎么加入数字,我们设计一颗特别的线段树: 假设当前我们在$[1, r]$中已经加完了数字,那么线段树的叶子结点$l$表示$\ 阅读全文
posted @ 2018-10-22 13:40 CzxingcHen 阅读(272) 评论(3) 推荐(0) 编辑