不常用但有时很有用的东西
文章平均质量分 51
caoyang1123
夜如果有千万个回头的理由
请原谅所有失忆的影子
原谅他们不只一次地将思念撒向无边无际的漆黑
长而且直的影子那么孤单
在长街上不断延长
八月的花蕾上有席卷荒野的风暴
相信一个属于抗争的季节
紧握着太阳骄傲的碎片,此刻
你慢慢把手心摊开
一片月光打落露水的声音
在那里凝结成坚固歌唱
……
我不会坚持用火焰说话
悲伤使我看到希望
你要听一听地底的呼叫
那个用紫色记忆的年代就要回来了
我不知道他曾经坍塌了多少回
我又曾经抱头痛哭在旷野中狂奔了多少回
那个怒吼着的年代就要回来了
在我的心灵里永远有一座煤矿
有挖掘不尽的火种
风雨中我在呼唤你听见了吗
展开
-
lyndon分解学习笔记
Problem - H - Codeforces假模板题,b站看jls用一个叫lyndon分解的神仙算法秒杀了此题,于是去学了lyndon分解,结果自己写完发现随便造了个数据就hack掉了(顺便去b站评论hack了一波jls,被回复了,XD),出题人可能自己没想到有人用这么冷门的算法......lyndon分解就是说每一个字符串,都能唯一地划分为一系列子串s1,s2,s3...sk,满足如下两条性质1)si是lyndon串,lyndon串的定义为最小后缀为自身的串,如ab、aab是,aa,ba不原创 2022-02-20 19:37:02 · 254 阅读 · 0 评论 -
牛客挑战赛53E题解 & 带花树学习笔记
登录—专业IT笔试面试备考平台_牛客网显然就是一个点能和两个坐标距离它(2,0)或(2,1)的点匹配,求最大匹配数。之前一直以为一般图最大匹配是np的,一直在分析这题有没有什么格点图的特殊性质,结果比赛结束才知道一般图最大匹配有一个叫带花树的算法(很久之前听过但压根没去学这种冷门算法...)带花树思想和匈牙利算法一致,仍然是不断地找增广路,问题在于增广路中会出现奇数个点组成地环,这个东西定义为“花”,即我们把里面的点类似缩连通分量一样缩在一起,可以发现我们可以通过调整花内匹配边的情况,能使得花中原创 2022-02-18 16:19:20 · 306 阅读 · 0 评论 -
arc128 C 凸包优化后缀和?
C - Max Dot (atcoder.jp)首先,不考虑m的限制假设对位置i上加1,那么显然由于单调不降的性质,i到n位置上都要加1,此时花费了(n - i + 1),收益为a数组的后缀和suf_sum[i],因此单位代价获得收益suf_sum[i] / (n - i + 1)。显然此时就是一个无穷背包,找到最大的suf_sum[i] / (n - i + 1)拉满即可。但是现在有了m的限制。不难想到一个贪心,同样找到最大的suf_sum[i] / (n - i + 1),如果能拉满原创 2021-10-20 22:37:03 · 239 阅读 · 0 评论 -
一般图最大匹配(带花树)模板
网上原理写的好的很多:一般图最大匹配——带花树 - Mr_Spade - 博客园 (cnblogs.com)(主席yyds)(33条消息) 一般图最大匹配问题-带花树开花算法_Wo xi Meiz-CSDN博客这里就贴个板子了......uoj079#include <bits/stdc++.h>#define pii pair<int,int>#define fi first#define sc second#define pb push_back转载 2021-10-19 21:14:05 · 151 阅读 · 0 评论 -
CF736 D1 格点图,皮克定理
点阵中多边形(顶点在格点)面积S=a+b/2-1,其中a是严格在图形内部格点数,b是图形边界上格点数,证明:证矩形以及直角三角形满足,再证图形相加也满足,然后任何一个三角形都可以分解为一个矩形减去三个直角三角形,任何一个多边形都可以分解为三角形相加 ,得证。...原创 2021-09-07 16:21:32 · 325 阅读 · 0 评论 -
组合数前缀和
第一种形式:C(n, n) + C(n + 1, n) + C(n + 2, n) + ... + C(m, n) 其中m >= n= C(m + 1, n + 1)证明:考虑把C(n, n)写成C(n + 1, n + 1),那么可以发现:C(n + 1, n + 1) + C(n + 1, n) = C(n + 2, n + 1) , 本质上就是组合递推式,考虑最后一个取不取然后依次递推:C(n + 2, n + 1) + C(n + 2, n) = C(n + 3, n.原创 2021-08-13 19:29:32 · 1251 阅读 · 0 评论 -
长链剖分优化树形dp
apio铁牌告辞(开场想打暴力然后gedit码代码5个小时没写完三题最低档暴力真是快乐),听课也就学到了一丢丢这个东西。模板题:https://www.luogu.org/problemnew/show/P5384首先k级兄弟可以一遍dfs的时候丢到k级父亲上变成求k级孩子的询问。求k级孩子有个很简单的做法,直接dfs的时候维护扫到某个点时记录下的每种dep出现次数,对于所有求这个...原创 2019-05-19 22:40:30 · 696 阅读 · 0 评论 -
bitset做多维偏序
很久以前就听说这个大名鼎鼎的东西(暴力)了,现在才去写。其实很简单,对每一维排序,从左到右扫,维护一个bitset表示这位之前的某个点是否出现(即出现则该位为1否则0),查询某个数时则在每一维的排序完数组二分找到最右边<=这个数这一维权值的位置,取出该位的bitset,将每一维的bitset与起来即可得到答案,每次查询n/w,但这样空间要维数*n^2/w,因此可以分块增加查找时的一些时间换空...原创 2019-04-18 19:38:34 · 1165 阅读 · 0 评论 -
可持久化数据结构
1.可持久化线段树(可持久化数组)https://www.luogu.org/problemnew/show/P3919#sub最基础的可持久化数据结构,每次修改开新的log个点即可。#include<bits/stdc++.h>using namespace std;const int N=1e6+100;template<class T>void...原创 2019-04-17 21:26:46 · 288 阅读 · 0 评论 -
记c++易错(玄学)错误
记录一些容易一下调几个小时的naive错误1.vector#include<bits/stdc++.h>using namespace std;struct gg{ int w,nxt;}tp;vector<gg>a;int id[10],sz;int new_node(int x){ tp.w=x,tp.nxt=0; a.push_bac...原创 2018-10-21 15:49:29 · 300 阅读 · 0 评论 -
最短路树学习笔记及例题
定义构建一棵树,使得任意不属于根的节点x,dis(root,x)=原图走到x的最短路。构建方法:就是在跑dijkstra时同时维护每个点是哪个点哪条边更新的,这个点这条边就是它在最短路树上的父亲/到父亲的边例题:T1.bzoj3694 最短路题意:给定了最短路树要求不经过树上到i点最后一条边的到i点最短路。显然到一个点走法一定是经过一条非树边到达的,那么考虑每一条非树边会产生怎...原创 2019-04-15 22:22:53 · 2117 阅读 · 0 评论 -
替罪羊树
平衡树一种,基于重构的思想,插入点的时候判断某个子树不平衡到达一定程度就重构成一棵平衡的子树,具体判断不平衡是取一个alpha(约0.75),当某节点max(左子树,右子树)>=alpha×该节点总子树大小就重构。对于有删除操作的题目则维护两个size表示总的(不管删没删)和真实还存在的,在重构时去掉删掉的即可。代码:#pragma GCC optimize(3,"inline",...原创 2019-03-11 19:36:06 · 117 阅读 · 0 评论 -
可并堆
对付一些需要合并堆的题目,这里写两种,斜堆和随机堆1.斜堆,merge类似treap,merge完交换左右子树,没了。int merge(int x,int y){ if(!x||!y)return x+y; if(v[x]<v[y])swap(x,y); rs[x]=merge(rs[x],y); swap(ls[x],rs[x]); r...原创 2019-03-11 19:55:45 · 296 阅读 · 0 评论 -
笛卡尔树
类似treap,建立一个有两个关键字的二叉树,满足以第一维关键字看是二叉搜索树,即左<父<右,以第二维看是堆,即孩子大于父亲,构建方法:按第一维关键字从小到大插入,通过一个保存二维关键字的单调栈维护正在构建的树的当前最右链,插入一个点时一直pop到单调栈中第一个能做当前点父亲的点,然后将之前最后pop出的当成当前点左孩子,将当前点记为栈顶的右孩子,加入单调栈中即可,复杂度O(n)...原创 2019-03-11 21:44:17 · 210 阅读 · 0 评论 -
路径压缩小trick
首先在并查集上的应用就不说了。考虑这样一个问题:有一个序列A,对于每个数Ai请你求出它左边第一个小于它的元素位置。显然可以线段树,但码量较大且常数也不优越。而路径压缩就能很好地解决,对每一个位置开一个pre数组表示答案,假设已知1~i-1答案要求i的,首先将pre(i)置为i-1,然后重复执行以下操作,当pre不为0且当前pre(i)不满足要求时,令pre(i)为pre(pre(i)),直到找...原创 2019-03-12 20:53:56 · 185 阅读 · 0 评论 -
欧拉路问题
无向图若存在节点s到t的路径,恰好经过每条边一次,则称其为s到t欧拉路,欧拉回路则是最终能走回s的。一张图若有欧拉回路则称为欧拉图。一张无向连通图是欧拉图,当且仅当所有节点度数是偶数。一张无向连通图有欧拉路,当且仅当只有两个点(起点终点)度数为奇数。求欧拉回路:dfs(x): 若某条边(x,y)未访问 标记为已访问,dfs(y),把y入栈。倒序输出...原创 2019-03-13 07:43:26 · 146 阅读 · 0 评论 -
卡只有路径合并并查集
并不会证明......卡法就是每次选择当前点中深度最大的接上一个孤立的,如果要更优还可以在最后几步里挑最大和次大合并,打表发现find_father函数每次合并时调用次数是2,3,4,4,5,5,5,5,6,6,6,6,6,6,6,6.......所以就是log了#include<bits/stdc++.h>#define pii pair<int,int>#de...原创 2019-04-07 16:17:36 · 557 阅读 · 0 评论 -
泰勒展开、牛顿迭代
泰勒展开:基本上是用一个近似的多项式表达一个函数,在某个x0处进行多次求导,得到一个新的多项式:f(x)=f(x0)+f′(x0)(x−x0)+f″(x0)2!(x−x0)2+⋯+f(n)(x0)n!(x−x0)n+Rn(x)其中最后的是余项。这样发现当n取得很大就能无限逼近函数。特别的把在x0取0时的泰勒展开称为麦克劳林级数。牛顿迭代:求一个函数等于0的位置(近似位置),...原创 2019-03-28 22:20:55 · 1530 阅读 · 0 评论 -
min-max容斥
基本就这俩式子:原创 2019-04-02 20:51:57 · 1303 阅读 · 0 评论 -
快速求解原根
设模数为p,所求数为1.O(p1/2)O(p^{1/2})O(p1/2)预处理+O(log2)O(log^2)O(log2)判断一个对p-1分解质因数,一个数x是模p意义下原根当且仅当对任意y⊂y\subsety⊂{p-1的质因数}有x(p−1)/y!=1(modp)x^{(p-1)/y}\quad !=1 \quad (mod \quad p)x(p−1)/y!=1(modp)2.O(p∗...原创 2019-04-15 16:18:11 · 1111 阅读 · 0 评论 -
一些编译命令
linux:-Wall 警告-ftrapv 判数字溢出-fsanitize=address -fsanitize=undefined 判断数组越界windows:-Wl,--stack=64000000 加在“编译命令”-static-libgcc 加在“连接器命令行”本地扩大栈空间...原创 2019-03-14 16:41:39 · 507 阅读 · 0 评论