摘要:
贪心 先记录每一个位置后面字母的第一个位置,以及出现次数,然后一位一位的构造字母,如果选了该字母后,后续字母可以满足约束条件,那么就合法。 include define INF 0x3f3f3f3f define full(a, b) memset(a, b, sizeof a) define FA 阅读全文
摘要:
魔改线性基 强制在线的做法,需要维护一个前缀的线性基,每次新加入数的时候,要把靠右边的数提到线性基的高位 这样维护的线性基,在查询区间异或和的时候,只需要把r为前缀的线性基出现为止大于l且异或之后和更大的数异或起来就行了,新套路!! 阅读全文
摘要:
LCT维护生成树 把边从小到大排序,然后一条一条加边,如果成环就把环上最小的删了,我们得到的第一个生成树就是最小生成树。 然后之后每一条边都比前面的生成树的最大边大,我们用这条边的权值减去生成树里最小的,更新答案即可。 因为要维护的是最小值,用排序之后的性质,下表小的值更小来pushup inclu 阅读全文
摘要:
思维 可以想到,速度慢的车一定会堵住他后面速度比他快的车,所以在到达终点线的时候,0车也可能会被前面的车堵住。 假设在0车之前有一辆车x,他的速度比x+1车要慢,且比\[i...x 1]车速度也要慢,那么他可作为当下后面所有车的那辆车。 那么其实无论\[i..x 1]的车发生怎样的变化,在这断变化直 阅读全文
摘要:
线性基模板 线性基可以看成把一组序列处理过后得到的新数组,他和原序列异或和的值域完全相同,也就是说原序列的任意几个数的异或和都可以被线性基的数表示出来,因此线性基可以看成数原序列的替代。 我们通过特殊的方法处理出线性基,可以快速求出原序列中异或和最大的子集,以及第k小的子集。 存一下自己的板子 in 阅读全文
摘要:
优先队列bfs + 状态压缩 不难想到,最小团就是空集,我们可以向这个空集里加点,来找到k小团 具体做法就是用优先队列,把权值小的团出队,为了不重复加点,我们可以记录一下最后几个被加进团的点,这样下次直接从该点之后遍历,这样就可以把所有点都遍历一次了。 用bitset来保存点连接状态可以直接判断该点 阅读全文
摘要:
单调栈 单调栈找出每以每个点所在的行为底能够产生的最大矩形面积,然后放进优先队列。 要找的是次大值,所以可能他的子矩阵也是我们要的答案,所有还有把当前矩阵长 1,宽 1的面积也放进去。 最后去重,对于相同的面积,我们在保存左右边界,这样矩形的长被确定了,所以宽也被确定了,这个矩形就被确定了,我们可以 阅读全文
摘要:
dp dp\[i]\[j]表示前i+j个字符中放了i个A和j个B的方法数。 我们可以贪心的先把前n个A都作为AB的A,前m个B都作为BA的B,这样显然是不影响答案的正确性的,因为假设前n个A中有一个是BA的A,那么我们一定可以在更后面找到一个A来代替当前的A成为BA的A,B的情况也同理。 因此我们对 阅读全文
摘要:
积分 数字太多不好计算,可以先看看比较简单的几种情况: n = 1时,可以直接积分出来,答案是 1/2a n = 2时,我们把原式展开,拆成两个分数相加的形式,用待定系数法解出分子,然后发现可以转化成两个n=1的情况相加 n = 3时,还是和上面一样的方法,死算。 最后发现通式为: $\sum_{i 阅读全文
摘要:
树形dp二次扫描换根 先dp一次求出每个点为根的流量最大值。 然后用f\[i]表示以i为源点整体流量的最大值,可以发现f\[root] = dp\[root] 然后考虑访问子节点,假设子节点为u,那么dp\[u]肯定是f\[u]的一部分,还有一部分就是流向父亲节点所在子树的流量。 在访问该节点前我们 阅读全文