摘要: 题解 我们枚举右端点判断合法的左端点有哪些 首先,记录一下右端点右边的点的pre,也就是这个数字前一个出现的位置,取所有小于枚举右端点r的值中最大的一个做为l,用优先队列维护即可,[l + 1,r]就是可能取到的左端点的区间 然后我们对于每一种数字,最前一次出现的位置p,最后一次出现的位置q,覆盖[ 阅读全文
posted @ 2018-06-19 18:57 sigongzi 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 题解 感觉全世界都写过只有我没写过 毕竟是板子还是挺简单的,只要用可持久化线段树维护一下数组的形态就好了,每个数组里面维护这个数组的father,和这个点所在树的最长链的深度(如果这个点是根按秩合并要用) 为了避免返回两个值可以直接返回所在线段树节点的编号 代码 cpp include includ 阅读全文
posted @ 2018-06-19 15:53 sigongzi 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 题解 考虑朴素的暴力,相当于枚举u点的每个祖先f,然后统计一下这个点f除了某个儿子里有u的那个子树之外的节点个数,乘上f到u距离的二进制1的个数 那么我们用倍增来实现这个东西,每次枚举二进制的最高位j,用dfs序枚举点u,找到u的距离为$2^j$的祖先,那么在fa[u][j]这个祖先的位置,j这一位 阅读全文
posted @ 2018-06-19 15:05 sigongzi 阅读(182) 评论(1) 推荐(0) 编辑
摘要: 题解 对于75分来说,操作肯定不会成环,可以暴搜 看成空格在移动,空格移动到原来的位置肯定经历了偶数个格子,但是操作的人是两个不同的人,所以肯定不会成环 对于满分做法,要找到一种更好的方式判先手是否会胜 我们看成空格在移动,每次空格必然是走一个黑棋,走一个白棋,这显然是一条交错路,我们考虑二分图 把 阅读全文
posted @ 2018-06-19 12:03 sigongzi 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 题解 我们把这个函数的递归形式画成一张图,会发现答案是到每个出度为0的点的路径的方案数 这个可以用组合数算 记录一下P[i]为i减几次PI减到4以内 如果P[i + 1] P[i],那么转向的路径走P[i]次,否则走P[i] 1次 代码 cpp include include include inc 阅读全文
posted @ 2018-06-19 09:50 sigongzi 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 题解 一道神奇的dp 我们发现关于两个东西的记录很难办,但是我们发现在固定时间区间内,如果A场地举办的活动数是一定的,那么B场地肯定举办的活动越多越好 我们预处理一个$num[i][j]$表示时间区间$[i,j]$有多少个活动会在这个区间里举办(被区间完整包含) $pre[i][x]$表示$[1,i 阅读全文
posted @ 2018-06-19 08:44 sigongzi 阅读(146) 评论(0) 推荐(0) 编辑