摘要:
目录ABCDEF A #include <bits/stdc++.h> #define int long long #define rep(i,a,b) for(int i = (a); i <= (b); ++i) #define fep(i,a,b) for(int i = (a); i >= 阅读全文
摘要:
隔板法 \(X_1+X_2+...+X_n=m,\quad X_i>=0\) \(求方程解的个数\) \(m个球插入n-1个板将m个球分成n份\) \(方程解的个数(^{n+m-1}_{m})\) 如果要求每份球的个数都大于1该怎么做? \(X_1+X_2+...+X_n=m,\quad X_i>= 阅读全文
摘要:
我们只需要记录每个数结尾的数是多少(有点最长上升子序列的味道) 这种子序列的题目很多都是这样的,因为不需要连续很多时候我们只记录最后一个元素是多少。 \(记s为较大子序列结尾当前的数,t为较小子序列结尾的数,下面分类讨论\) \(当a[i]<=t<s时\)我们将a[i]既可以放进t所在的子序列,也可 阅读全文
摘要:
感觉分类讨论的能有点弱。遇到复杂一点的分类讨论的题目,代码就写的巨长。 首先观察到处在中间位置的1对答案的贡献是11,具体在中间哪个位置是没有关系的。 只有两端的两个位置是比较特殊的 \(1位置处的1对答案的贡献是10\) \(2位置处的1对答案的贡献是1\) 所有我们考虑将最左端第一次出现的1放到 阅读全文
摘要:
基本原理 树状数组的原理简单来说就是利用二进制拆分区间 我们可以对一个数进行二进制分解,最多分解成log(x)个数,同样我们可以对[1,n]这个区间进行分解。也是最多log段,每次修改时我们维护受到影响的区间,然后查询时用这log个区间拼凑出一个前缀。这就是树状数组的大概思想。 最基本的作用是动态维 阅读全文