上一页 1 2 3 4 5 6 ··· 27 下一页
摘要: 传送门 解题思路 平衡树板子题。 每次所有的数加或减可以O(1)加或减限制,然后删除掉小于当前限制的点,统计答案。 加点时把原权值减去sum然后扔到Splay中,询问第k大时也要把查询的答案加上一个sum。 AC代码 #include<iostream> #include<cstdio> #incl 阅读全文
posted @ 2021-11-15 11:20 尹昱钦 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 首先考虑无解的情况: 首尾距离 \(<s\) 第一个石头到 \(0\) 的距离 \(<s\) 或第二个石头到 \(n+1\) 的距离 \(<s\) 存在一个 \(a[i+1]-a[i-1]<s\) 判断完无解的情况,考虑构造答案。 最简单的方法是过去的时候跳1,3,5,7,9,…… 阅读全文
posted @ 2021-11-09 08:22 尹昱钦 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 先二分答案,然后做一个在树上从叶子节点向上的贪心,让每个叶子尽可能取满。 当然也可以直接树形dp,O(n)。 注意如果WA on test 5,说明爆long long了,因为二分mid可以达到1e14,然后贪心过程中累加可能爆掉。 这时候设置一个inf,如果当前sum>inf,s 阅读全文
posted @ 2021-11-08 20:21 尹昱钦 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 非常好的一道题。 一开始错误的认为对于一个确定的左端点,合法的区间一定是右面的一个前缀。 但事实上并不是。 因为区间[k+1,2k]的起点不确定,所以不满足单调性。 所以正确的解法是先看区间[1,k],找到最大的k(因为这个区间满足单调性),然后回滚,看看最大k是多少可以使[k+1 阅读全文
posted @ 2021-11-07 15:04 尹昱钦 阅读(207) 评论(1) 推荐(0) 编辑
摘要: 传送门 解题思路 用平衡树维护摧毁的房屋。 摧毁等于insert,修复等于delete,询问等于查询前驱后继。 为了方便先扔进一个0点和n+1点。 注意查询时先进行判断当前房屋是否已经摧毁。 AC代码 #include<iostream> #include<cstdio> #include<cstr 阅读全文
posted @ 2021-11-07 14:56 尹昱钦 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 Splay如何维护序列呢? 以序列下标作为val值,扔到Splay中。 因为有区间翻转操作,所以实际上并不能保证绝对的按照val值排序,也就是说Splay的中序遍历结果是真正的序列,而val值对应的是当前序列的每个元素原来的位置。 与普通的Splay的区别在于多了一个区间翻转操作, 阅读全文
posted @ 2021-11-06 20:44 尹昱钦 阅读(54) 评论(0) 推荐(0) 编辑
摘要: 传送门 Splay 细节是真他妈多,写了一天,写吐了。 后悔没先学treap了。 需要实现以下函数: void Init():重置整棵树(删除了整棵树的时候用) int New(int val,int fa):新建一个节点,权值为val,父亲为fa,返回节点编号 void Delete(int x) 阅读全文
posted @ 2021-11-02 21:33 尹昱钦 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 任何一个ICG(公平组合游戏)都可以转化成一个有向图移动问题,从而使用SG函数求解。 SG函数的定义为:SG(u)=mex{SG(v)}。 mex表示集合中第一个未出现的数字。 SG函数可以用类似拓扑序的方式,从最终状态一步步向前推。 最后若起点的SG函数值不为0,则先手必胜。 若多张图多个起点? 阅读全文
posted @ 2021-11-01 22:03 尹昱钦 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 点分治 采用分治思想。对树上路径问题进行查询时,把路径分成两部分,一部分是经过根节点的路径,一部分是不经过根节点的路径。 而在处理不经过根节点的路径时,可以才有分治思想,递归到左右子树进行求解。 这样复杂度是 \(O(n^2)\) 的,但是若我们每次选取的根节点都是要求解的子树的重心,则复杂度可以优 阅读全文
posted @ 2021-11-01 17:02 尹昱钦 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 传送门 传送门 判断节点u的子树是否是对称二叉树的方法: 判断hash1[l[u]]是否等于hash2[r[u]]。 其中hash1中存的是按照根左右的顺序的哈希值,hash2存的是按照根右左顺序的哈希值。 当两个hash值相等时,即为对称二叉树。 单哈希和双哈希貌似都不太稳定,而用自然溢出即可AC 阅读全文
posted @ 2021-10-31 10:50 尹昱钦 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 关键点:根据线性基的性质,若序列数字个数大于等于30,则一定有异或值为0的两个集合。 所以对于每个询问,先判断两个点之间的路径长度是否大于等于30,若小于30,直接暴力找,线性基判断,否则直接判断。 对于每次修改,可以用线段树维护树剖。 AC代码 #include<iostream 阅读全文
posted @ 2021-10-29 08:10 尹昱钦 阅读(59) 评论(0) 推荐(1) 编辑
摘要: 传送门 解题思路 首先背过线性基的一个性质吧(因为我不会证明): 线性基里的每一个异或值出现的次数相等,为 \(2^{n-k}\) 。 然后这题就变成统计某个数是第几大异或值了。 分类讨论在归纳一下: 假设询问的数字是q。当处理到第i位且q的这一位为1,且线性基这一位有数,则 当前面位异或起来得到的 阅读全文
posted @ 2021-10-28 17:53 尹昱钦 阅读(91) 评论(0) 推荐(1) 编辑
摘要: 传送门 前置知识: Nim博弈 线性基 解题思路 注意两人各进行一次操作,所以目的就是要使对方不管怎么拿,都不能到达一个异或和为0的状态。 所以相当于第一次操作结束后,必须保证任意元素异或值不为0。 这就很典型的线性基了,并且和[BJWC2011]元素这个题完全一样,贪心取即可。 AC代码 #inc 阅读全文
posted @ 2021-10-28 13:33 尹昱钦 阅读(27) 评论(0) 推荐(1) 编辑
摘要: 传送门 解题思路 非常清新的一道题。 先假设选择了一条1->n的主路径,然后在这条路径上向外拓展。 发现只有环对答案有影响,因为非环的边一定会走两次,异或和为0。 因为图是联通的,所以可以经过任意环,所以可以把所有的环的异或值扔到线性基里。 然后再考虑选择哪一条路径,我们发现若1->n有多条路径,其 阅读全文
posted @ 2021-10-28 11:47 尹昱钦 阅读(33) 评论(0) 推荐(1) 编辑
摘要: 传送门 解题思路 贪心策略:按照价值从大到小排序,能选就选。 用线性基维护是否发生冲突。 正确性:异或和为0的几个数中去掉价值最低的异或和一定不为0。 AC代码 #include<iostream> #include<algorithm> #include<cmath> #include<cstdi 阅读全文
posted @ 2021-10-27 21:54 尹昱钦 阅读(24) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 27 下一页