数据结构乱做
POI20填坑计划

POI18填坑计划

HJWJBSR posted @ 2016年1月19日 22:06 in 题解 , 678 阅读

这个感觉一路都推的比较顺。。只不过经常SB进了细节坑

现在完成了:

16

[Plot]:二分答案显然。。维护凸包的时候顺便查询插入点的对踵点和旁边两个点更新答案就好。。由于只有插入点的动态凸包随便搞就好。。

[Tree Rotations]:SB题。。可以看出每个点的状态对答案的贡献是独立的。。然后就treap启发式合并就好。然后那个什么n log n的treap直接合并可以做这个的加强版吧。。但是treap启发式合并在加强版还是能拿97分所以就没写n log n了。

[Conspiracy]:很容易可以分析出只会有O(n)种答案。而且答案之间最多只会替换一个点。。一堆显然的性质套上去特判就好了。。初始答案只要按度数从大到小取。还要注意特判有一边为空集的情况。

[Lighting Conductor]:一开始以为n*sqrt(n)的RMQ过的去。。后来发现有决策单调性。。然后就直接单调队列维护就好了。。

[Lollipop]:前缀后缀扫一遍。然后发现当1~i的和大于查询数并且第i+1个数为1的时候就可以直接取了。所以排序+扫几遍。

[Temperature]:一个区间是可行的当且仅当不存在i<j使得Li>Rj。归纳法可证。于是就只要单调队列扫一遍就好。。一开始没看空间范围直接上了个线段树MLE。。虽然改一改线段树也是能过的。。

[Strongbox]:先将最后一个数和n gcd一下。然后将得到的这个数和前面的数都gcd一下。然后求n的每个因子可不可以作为答案。并且每个因子可以最多转移到log个节点。

[Garbage]:一眼觉得可以求欧拉回路然后直接算出答案。。但是觉得麻烦就写了一个乱搞结果还是T了。。

[Dynamite]:一开始觉得二分答案+每次找到最深未炸节点炸掉。后面那东西用链表维护是O(n)的。但是还是SB了一下把这样n/Ans次炸这棵树的复杂度算成了O(n)。。= =靠谱做法是DP。。复杂度就是n log n

[Meteors]:整体二分就好。。

[Party]:经典题。讲课讲过很多次。每次选择一个未删除的虚边上两点删掉就好。由于存在团所以肯定有至少一个点不在团上。所以最多删n/3次。。

[Difference]:考虑右端点为k的答案贡献肯定是把最多的算作Ck。然后一路维护前缀和还有Si-Sj的极值即可

[Sticks]:一开始naive不知道为什么觉得要用set。。排个序然后随便维护一下找出最大的异色的前两个棍子。。不知道那个颜色个数小于等于50是怎么用的。。复杂度明显无关的。。

[Inspection]:满足最大子树不超过一半的也就只有重心了吧。。然后直接特判一下最后一步是走最深节点还是只能走其它子树就好了。。

[Programming Contest]:很容易脑补出一个性质:每次Hungary就是最优解。。不会证但是感觉显然。。然后我想了两种写法一种动态删边,一种动态加边。然后作死写了第一种果然有后效性。。两个都是n^3的。。

[Shift]:很容易看出没有解的情况只有n为奇数并且给定状态的逆序对数跟目标状态不同。其余情况我们都可以构造出解。然后我只会n^2次的做法了。。比如每次把一个数往前面提。。比如每次将任意一个三元组变成最优状态(因为每次都会减少一个逆序对所以肯定是n^2的)。。当然感觉上还是前面那个常数会小一些。。我的写法丑了真尼玛调好久。。

[Periodicity]:我记得这题被出到过某ZHZX的NOIP模拟题里面。。简直sxbk。。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter