摘要: 题意: 给出一个带点权的树。q次询问,每次询问给出u和x,求点u的子树中与x异或的最大值。 题解: 将询问离线化。 每颗节点动态建立字典树。每个节点和自己的孩子合并,但是这样会改变子树节点的字典树,所以就在每个节点回溯的时候计算出该节点的答案。 #include <iostream> #includ 阅读全文
posted @ 2018-06-07 21:46 Pneuis 阅读(175) 评论(0) 推荐(0) 编辑
摘要: A.Arcade Game(康拓展开) 题意: 给出一个每个数位都不同的数n,进行一场游戏。每次游戏将n个数的每个数位重组。如果重组后的数比原来的数大则继续游戏,否则算输。如果重组后的数是最大的数则算赢,问赢的概率。 题解: 用康拓展开求出n是第几大的数,然后递推后面的概率。 #include <b 阅读全文
posted @ 2018-06-03 21:00 Pneuis 阅读(543) 评论(0) 推荐(0) 编辑
摘要: 题意: 初始有n个点,m次操作。每次操作加一条边或者询问两个点第一次连通的时刻(若不连通输出-1)。 题解: 用并查集维护每个点所在连通块的根。对于每次加边,暴力的更新新的根。 每次将2个块合并时,将小的块并向大的块。这么合并使得每个点的根最多更新log2n次,并储存每次更新信息(更新时刻以及新的根 阅读全文
posted @ 2018-06-03 19:12 Pneuis 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 题意: 给出一个长度为n的序列,序列中包含0。定义f(i)为把所有0变成i之后的Lis长度,求∑ni=1i⋅f(i)。 题解: 设不考虑0的Lis长度为L,那么对于每个f(i),值为L或L+1。 预处理f[j],g[j]代表在第j个数结束和从第j个数开始的Lis长度。 对于(1~n)的每个j,找到一 阅读全文
posted @ 2018-05-30 13:56 Pneuis 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 题意: 给出一棵树以及m,a,b,x0,y0。之后加m条边{(x1,LCA(x1,y1)),(x2,LCA(x2,y2))...(xm,LCA(xm,ym))}。定义z = f(0)^f(1)^...^f(n-1),其中f(i)代表删掉点i的连通块数。则xi = (axi-1+byi-1+z)%n, 阅读全文
posted @ 2018-05-30 13:18 Pneuis 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 题意: 给一个环,环上有n+m个点。给n个点染成B,m个点染成W。求所有染色情况的每段长度乘积之和。 题解: 染成B的段数和染成W的段数是一样的(因为是环)。 第一段是可以移动的,例如BBWWW移动为BWWWB。 所以处理两个方程:b[i][j]代表把j分成i段的乘积和且第一段不能移动;f[i][j 阅读全文
posted @ 2018-05-30 11:31 Pneuis 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 题意: 给定长度为n的序列和q次询问。每次询问给出一个区间(L,R),求出区间内每个数第一次出现位置的中位数,强制在线。 题解: 用主席树从右向左的插入点。对于当前点i,如果a[i]出现过,则把原位置-1,i处+1。这样保证了每个点只出现1次。 对于询问区间(L,R),求出L节点[L,R]的值即为区 阅读全文
posted @ 2018-05-27 17:21 Pneuis 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 题意: n张卡牌,正反两面有两个数字。每一面的概率都为0.5。将所有卡片的值异或起来,求异或值不为0的概率。 题解: 考虑异或值为0的情况。 用sum表示a[1]^...^a[n]的值。用c[i]表示a[i]^b[i]。那么sum^c[i]^...^c[j]代表总的异或值。即sum=c[i]^... 阅读全文
posted @ 2018-05-25 22:42 Pneuis 阅读(236) 评论(3) 推荐(0) 编辑
摘要: 题意: 给出一颗带点权的树。q次询问,每次询问给出点u,v。在两点路径上选出一些点,使其点权异或和最大。 题解: 倍增的合并树上的线性基。对于每次询问,将路径上的点倍增的合并。最后贪心的从高位开始取最大值。 #include <bits/stdc++.h> using namespace std; 阅读全文
posted @ 2018-05-25 19:20 Pneuis 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 题意: 给定N个数,一个数k和一个范围[L,R]。每个数可以使用任意次,k表示与非不超过k位。求出范围内有多少个数可以由他们的与非和表示。 题解: m个数进行NAND,最终的数二进制下某一位如果为1,那么这m个数二进制下这一位也肯定为1。所以如果N个数某些位相同的话就可以把这些位并成一个基。 因为a 阅读全文
posted @ 2018-05-25 18:41 Pneuis 阅读(150) 评论(0) 推荐(0) 编辑