05 2018 档案

摘要:题意: 给出一个长度为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 阅读(274) 评论(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 阅读(183) 评论(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 阅读(238) 评论(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 阅读(156) 评论(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 阅读(258) 评论(3) 推荐(0)
摘要:题意: 给出一颗带点权的树。q次询问,每次询问给出点u,v。在两点路径上选出一些点,使其点权异或和最大。 题解: 倍增的合并树上的线性基。对于每次询问,将路径上的点倍增的合并。最后贪心的从高位开始取最大值。 #include <bits/stdc++.h> using namespace std; 阅读全文
posted @ 2018-05-25 19:20 Pneuis 阅读(267) 评论(0) 推荐(0)
摘要:题意: 给定N个数,一个数k和一个范围[L,R]。每个数可以使用任意次,k表示与非不超过k位。求出范围内有多少个数可以由他们的与非和表示。 题解: m个数进行NAND,最终的数二进制下某一位如果为1,那么这m个数二进制下这一位也肯定为1。所以如果N个数某些位相同的话就可以把这些位并成一个基。 因为a 阅读全文
posted @ 2018-05-25 18:41 Pneuis 阅读(164) 评论(0) 推荐(0)
摘要:题意: 给定n支铅笔,问能不能分成若干堆,使得每堆数量不小于k且每堆的最大值和最小值之差不大于d。 题解: 排序。从后往前扫一遍。考虑以每个点为最小值建堆是否合法。对于当前点i,它需要至少k支铅笔,但是最大值不超过a[i]+d,所以就会有一个成立的范围[l,r]。假设存在点k(l<=k<=r),使得 阅读全文
posted @ 2018-05-22 08:51 Pneuis 阅读(526) 评论(0) 推荐(0)
摘要:题意: 给出一棵树,删掉其中一些边,要求生成的每个子树节点数一样。输出所有可以删掉的边数。 题解: 以节点1为根,预处理每个子树的大小。对于每个n的因数x,还需满足子树为他倍数的点够n/x个,那么删的边数就为n/x-1。 #include <bits/stdc++.h> using namespac 阅读全文
posted @ 2018-05-12 17:15 Pneuis 阅读(425) 评论(0) 推荐(0)
摘要:题意: 一个区间支持三种操作,区间加,区间开根号和区间求和。 题解: 线段树的做法。对于区间开根号操作,如果要开根号的区间最大值和最小值相等的话相当于区间减操作。当最大值和最小值相差1时,如果最大值是平方数那么也相当于区间减操作,否则就是区间覆盖。 #include <iostream> #incl 阅读全文
posted @ 2018-05-11 18:07 Pneuis 阅读(302) 评论(0) 推荐(0)
摘要:题意: 给出一个N个节点的有向图。图中任意两点进行通信的代价为路径上的边权和。如果两个点能互相到达那么代价为0。问从点0开始向其余所有点通信的最小代价和。保证能向所有点通信。 题解: 求出所有的强连通分量,然后进行缩点操作。最后贪心的找出每个点的最小代价,然后求和。 #include <iostre 阅读全文
posted @ 2018-05-05 23:55 Pneuis 阅读(175) 评论(0) 推荐(0)
摘要:题意: 长度为N的序列,初始时间戳为0,有M次操作。 C l r d:代表区间[l, r]的数加d,当前时间戳加1. Q l r:代表输出当前时间戳内[l, r]的区间和. H l r t:代表输出时间戳为t时[l, r]的区间和. B t:代表把时间戳置为t. 题解: 先初始化一棵带lazy线段树 阅读全文
posted @ 2018-05-04 23:02 Pneuis 阅读(201) 评论(0) 推荐(0)