前置知识-容斥定理:
将事件 A,表示成多个子事件 A1, A2...Ak 的并集,不要求事件互斥,即 ⋃Ai = A
容斥定理,可以让我们用这些子事件的交集计算整个事件
1. 两集合的简单容斥
2. 更一般的容斥定理
3. 子集容斥-子集反演
为某集合,若两个函数满足如下关系:则其逆运算为:
洛谷P10580
题意
长度为 n 的序列 a, gcd (a) = x, lcm(a) = y, 求序列方案数
解析
对于x,y,由唯一分解定理,我们可拆解成如下形式
不同质因子相互独立,考虑研究某个质因子,假设是 p1
分解 ai = p1ki1p2ki2p3ki3...
因为gcd (a) = x,我们有 min ki1 = c1
因为lcm(a) = x,我们有
max ki1 = e1
也就是所有序列中所有数,都要满足,质因子的幂,且至少存在一个数的幂是 c1,至少存在一个数的幂是
c2
设 t = y/x,分解
t = p1k1p2k2p3k3...
对于某种质因子,我们等价转化成如下 ...
二维前缀和是一维前缀和的扩展,三维前缀和则是二维的基础上再加一维
三维前缀和
求三维前缀和数组,可以分别对 x,y,z 维进行求和。二维同样也可以分别对
x,y 维进行求和,只是我们很少这样去做。
具体来说 :
1234567891011121314for(int i=1; i<=n; i++)for(int j=1; j<=m; j++)for(int k=1; k<=h; k++)mat[i][j][k] += mat[i-1][j][k];for(int i=1; i<=n; i++)for(int j=1; j<=m; j++)for(int k=1; k<=h; k++)mat[i][j][k] += mat[i][j-1][k];for(int i=1; i<=n; i++)for(int j=1; j<=m; j++)for(int k=1; k<=h; k++)mat[i][j][k] += mat[i][j][k-1];
还有一种容斥的方法也可以求这个,不过比较复杂 :
123456789101112 ...
前言
在不要求实时更新数组的情况下,差分是非常有用思想。相较于一阶差分的区间加,二阶差分可以进行更复杂的操作,比如将一个区间加上等差数列,或是一次性对多个特殊区间进行区间加操作。
二阶差分是一阶差分的扩展,相应的,还有更高阶数的差分,可以用来区间加多项式
前置知识
一阶差分
一阶差分可以 O(1)
实现区间加操作,最后 O(n) 求出原数组。如要求
al…ar
都加 v,则diff[l]+=v, diff[r+1]-=v即可。
同理,在二维的情况下也可以 O(1) 实现矩形区域加,最后 O(nm)
求出原数组。具体来说若 [x1, x2] × [y1, y2]
的二维区域都加 v,则diff[x1][y1]+=v, diff[x2+1][y1]-=v, diff[x1][y2+1]-=v, diff[x_2+1][y_2+1]+=v即可。
二阶差分
若每次操作要将 [l + xd1, r + xd2]
这样的一堆区间每个区间都加 v,一阶差分每次操作时间复杂度 O(x)。对于这样的问题,二阶差分可以优化为
O(k + n),k
为操作次数。
我们先考虑 ...
Fujian CCPC 2025 - invitational
& Fujian CPC
2025/08/20
本场难度
Eazy:M 致谢
Easy-medium:G 炒股高手、J
构造大师CFJ、K VERTeX
Medium:C 中位数、E
卡牌游戏、H 难以控制的火箭滑板、I 割 点
Medium-hard:D 二叉树、L 众数、B XCPC、F
帕累托前沿
Hard:A we are watching you!
赛时做题
M, K, J, L
补题
H, G, E, C
尝试/未补出
B 已会未写
UPD : B 题已 AC, 解析详见二阶差分
历程
一开始看 B 题,放弃后不知道为什么一直以为这是
G(某签题),就导致比赛结束都没写这道签。H 题,吃饭快点就过了 ( 。C
题二分看不出来,虽然补了之后发现真的简单。
Shenyang ICPC 2024 -
regional
2025/08/22
本场难度
Easy:J
Medium-Easy:B、D、E、M(+)
Medium:A(+)、G( ...







