摘要: Day 0 晚上自己一个人住在宾馆,不过能和xhy、ljx、gjy他们联系上还是蛮不错的啦。 Day1 上午 早上很早就起床了,收拾收拾行李,然后拖着行李箱“长途跋涉”,穿过一片茂密的树林,来到汹涌的河流面前,于是跨过银白色的状元桥,走上一条蜿蜒起伏的羊肠小道,最后踏过一个古老神秘的大门,抵达目的地 阅读全文
posted @ 2021-10-25 07:41 尹昱钦 阅读(139) 评论(2) 推荐(0) 编辑
摘要: Day 0 考虑到第二天早上可以晚起并且在车上可以睡觉,我就熬到一点。。 Day 1 困死。 困死。 困死。 去的时候太乱了,睡觉失败。 到考场发现厕所水龙头都没水。 洗不了脸了。。 进考场了。 困死。 困死。 困死。 我是前几个进考场的。 发现wzm大佬竟也在我们考场! 没错,就是那个今年noi 阅读全文
posted @ 2021-09-22 07:29 尹昱钦 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 直接用洛谷题解! 说的好! 怎么求有向图的欧拉路径呢? 如果有起点,从起点出发,然后不断dfs,对每个点记录其出边已经到了哪一条,然后当一个点的出边都遍历完的时候就把这条边加入栈中。 这样就找到了一条合法的欧拉路径。 可以使用当前弧优化,时间优化到O(n+m)。 这个题因为要求字典 阅读全文
posted @ 2021-11-19 11:35 尹昱钦 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 若干平衡树,每次操作有两种,一是合并两个Splay,二是查询某一个点所在的平衡树里的第k小的点的编号。 首先用并查集维护某个点在哪个平衡树里,然后rt[i]记录编号为i的平衡树的根。 每次合并时启发式合并,直接把小的树的每个点暴力insert到大树里。 查询正常操作即可。 为了方便 阅读全文
posted @ 2021-11-18 17:12 尹昱钦 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 若强制在线,可以考虑用树剖+主席树,相当于每次询问两个点之间的路径上在 \(i-C_i\) 时刻之前开始搜集情报的人数。 但是这题可以离线,于是可以把询问按照 \(i-C_i\) 离线一下,就可以用线段树/树状数组来维护了。 注意一定要区分原编号和dfn编号。 时间复杂度:\(O( 阅读全文
posted @ 2021-11-16 21:39 尹昱钦 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 平衡树板子题。 每次所有的数加或减可以O(1)加或减限制,然后删除掉小于当前限制的点,统计答案。 加点时把原权值减去sum然后扔到Splay中,询问第k大时也要把查询的答案加上一个sum。 AC代码 #include<iostream> #include<cstdio> #incl 阅读全文
posted @ 2021-11-15 11:20 尹昱钦 阅读(9) 评论(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 尹昱钦 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 先二分答案,然后做一个在树上从叶子节点向上的贪心,让每个叶子尽可能取满。 当然也可以直接树形dp,O(n)。 注意如果WA on test 5,说明爆long long了,因为二分mid可以达到1e14,然后贪心过程中累加可能爆掉。 这时候设置一个inf,如果当前sum>inf,s 阅读全文
posted @ 2021-11-08 20:21 尹昱钦 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 非常好的一道题。 一开始错误的认为对于一个确定的左端点,合法的区间一定是右面的一个前缀。 但事实上并不是。 因为区间[k+1,2k]的起点不确定,所以不满足单调性。 所以正确的解法是先看区间[1,k],找到最大的k(因为这个区间满足单调性),然后回滚,看看最大k是多少可以使[k+1 阅读全文
posted @ 2021-11-07 15:04 尹昱钦 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 用平衡树维护摧毁的房屋。 摧毁等于insert,修复等于delete,询问等于查询前驱后继。 为了方便先扔进一个0点和n+1点。 注意查询时先进行判断当前房屋是否已经摧毁。 AC代码 #include<iostream> #include<cstdio> #include<cstr 阅读全文
posted @ 2021-11-07 14:56 尹昱钦 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 Splay如何维护序列呢? 以序列下标作为val值,扔到Splay中。 因为有区间翻转操作,所以实际上并不能保证绝对的按照val值排序,也就是说Splay的中序遍历结果是真正的序列,而val值对应的是当前序列的每个元素原来的位置。 与普通的Splay的区别在于多了一个区间翻转操作, 阅读全文
posted @ 2021-11-06 20:44 尹昱钦 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 传送门 Splay 细节是真他妈多,写了一天,写吐了。 后悔没先学treap了。 需要实现以下函数: void Init():重置整棵树(删除了整棵树的时候用) int New(int val,int fa):新建一个节点,权值为val,父亲为fa,返回节点编号 void Delete(int x) 阅读全文
posted @ 2021-11-02 21:33 尹昱钦 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 任何一个ICG(公平组合游戏)都可以转化成一个有向图移动问题,从而使用SG函数求解。 SG函数的定义为:SG(u)=mex{SG(v)}。 mex表示集合中第一个未出现的数字。 SG函数可以用类似拓扑序的方式,从最终状态一步步向前推。 最后若起点的SG函数值不为0,则先手必胜。 若多张图多个起点? 阅读全文
posted @ 2021-11-01 22:03 尹昱钦 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 点分治 采用分治思想。对树上路径问题进行查询时,把路径分成两部分,一部分是经过根节点的路径,一部分是不经过根节点的路径。 而在处理不经过根节点的路径时,可以才有分治思想,递归到左右子树进行求解。 这样复杂度是 \(O(n^2)\) 的,但是若我们每次选取的根节点都是要求解的子树的重心,则复杂度可以优 阅读全文
posted @ 2021-11-01 17:02 尹昱钦 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 传送门 传送门 判断节点u的子树是否是对称二叉树的方法: 判断hash1[l[u]]是否等于hash2[r[u]]。 其中hash1中存的是按照根左右的顺序的哈希值,hash2存的是按照根右左顺序的哈希值。 当两个hash值相等时,即为对称二叉树。 单哈希和双哈希貌似都不太稳定,而用自然溢出即可AC 阅读全文
posted @ 2021-10-31 10:50 尹昱钦 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 关键点:根据线性基的性质,若序列数字个数大于等于30,则一定有异或值为0的两个集合。 所以对于每个询问,先判断两个点之间的路径长度是否大于等于30,若小于30,直接暴力找,线性基判断,否则直接判断。 对于每次修改,可以用线段树维护树剖。 AC代码 #include<iostream 阅读全文
posted @ 2021-10-29 08:10 尹昱钦 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 首先背过线性基的一个性质吧(因为我不会证明): 线性基里的每一个异或值出现的次数相等,为 \(2^{n-k}\) 。 然后这题就变成统计某个数是第几大异或值了。 分类讨论在归纳一下: 假设询问的数字是q。当处理到第i位且q的这一位为1,且线性基这一位有数,则 当前面位异或起来得到的 阅读全文
posted @ 2021-10-28 17:53 尹昱钦 阅读(8) 评论(0) 推荐(0) 编辑