![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
模板
妖怪吧
这个作者很懒,什么都没留下…
展开
-
堆【模板】
题目描述如题,初始小根堆为空,我们需要支持以下3种操作:操作1: 1 x 表示将x插入到堆中操作2: 2 输出该小根堆内的最小数操作3: 3 删除该小根堆内的最小数输入输出格式输入格式: 第一行包含一个整数N,表示操作的个数接下来N行,每行包含1个或2个正整数,表示三种操作,格式如下:操作1: 1 x操作2: 2操作3: 3输出格式: 包含若干行正整数,每行依次对应一个操作2的结果。输入输出样例原创 2017-12-13 18:06:33 · 137 阅读 · 0 评论 -
spfa(模板)
#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;const int MAXN = 10005,MAXM = 500005;struct Edge{ int nxt,to,v;}edge[MAXM];...原创 2018-04-26 00:07:36 · 114 阅读 · 0 评论 -
ST表 (模板) 洛谷3865
题目背景这是一道ST表经典题——静态区间最大值请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1) O(1)题目描述给定一个长度为 N N 的数列,和 M M 次询问,求出每一次询问的区间内数字的最大值。输入输出格式输入格式: 第一行包含两个整数 N, M N,M ,分别表示数列的长度和询问的个数。第二行包含 N 个整数,依次表示数列...原创 2018-04-29 20:33:09 · 113 阅读 · 0 评论 -
树状数组 (模板)
1、单点修改+区间查询。#include<bits/stdc++.h>using namespace std;const int MAXN = 500005;int n,m,a[MAXN],f[MAXN];inline void add(int x,int y){ //单点修改。 for(;x<=n;x+=x&-x) f[...原创 2018-05-22 23:28:20 · 151 阅读 · 0 评论 -
线性筛欧拉函数与莫比乌斯函数 (模板)
#include&lt;bits/stdc++.h&gt;using namespace std;const int MAXN = 1e5+1;int prime[MAXN]; //素数int phi[MAXN]; //欧拉函数int miu[MAXN]; //莫比乌斯函数int cnt;bool vis[MAXN]; int main(){ miu[1]=1;...原创 2018-06-18 10:36:57 · 216 阅读 · 0 评论 -
poj 2417 Discrete Logging
题面 bsgs模板。 大意是给三个数a,b,p,p是质数,求出x满足a^x=b(mod p) 变个形 设x=i*m-j a^(i*m-j)=b(mod p) a^(i*m)=b*a^j (mod p) m为ceil(sqrt(p)) 我们就先枚举j算出b*a^j,做一份hash表,用map存。 之后再枚举i,看表中是否有a^(i*m)。 j是0~m,i是1~m。代码...原创 2018-07-01 13:12:46 · 129 阅读 · 0 评论 -
组合数递推(模板)
组合数,根据C(n,m)=C(n-1,m)+C(n-1,m-1)递推可得,时间复杂度O(n^2)代码#include<bits/stdc++.h>using namespace std;const int MAXN = 100;int c[MAXN][MAXN];int main(){ int n=30; c[1][0]=c[1][1]=1...原创 2018-06-19 23:35:24 · 1051 阅读 · 0 评论 -
线性基(模板) LUOGU 3812
题面解题思路线性基,是构造出一组数:ax,ax-1….a1,ax的二进制最高位为x。这些数字能异或和可以表示原来所有数的异或和。其实相当于一个高斯消元的过程。所以我们按位枚举,如果这一位曾经没数,就直接加入,如果有数,我们就让这两个数异或起来,进而继续表示其他的数。要求最大值则按位贪心即可。代码#include<iostream>#include<c...原创 2018-07-02 16:59:48 · 167 阅读 · 0 评论 -
素数筛
题目描述如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内)输入输出格式输入格式: 第一行包含两个正整数N、M,分别表示查询的范围和查询的个数。接下来M行每行包含一个不小于1且不大于N的整数,即询问该数是否为质数。输出格式: 输出包含M行,每行为Yes或No,即依次为每一个询问的结果。输入输出样例输入样例#1: 复制 100 5 ...原创 2018-01-05 16:46:32 · 152 阅读 · 0 评论 -
LUOGU 3089 后缀排序(模板)
传送门解题思路这是一个神奇的算法,sa[i]表示排名第i为的元素是啥,rk[i]表示第i个元素排名是啥。然后使用基数排序+倍增的思想去处理。主要是参考的这位大佬的博客(https://www.cnblogs.com/victorique/p/8480093.html#autoid-1-3-4)代码#include&lt;iostream&gt;#include&lt;...原创 2018-07-20 21:25:44 · 143 阅读 · 0 评论 -
可持久化线段树(主席树)模板
题目背景这是个非常经典的主席树入门题——静态区间第K小数据已经过加强,请使用主席树。同时请注意常数优化题目描述如题,给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值。输入输出格式输入格式: 第一行包含两个正整数N、M,分别表示序列的长度和查询的个数。第二行包含N个正整数,表示这个序列各项的数字。接下来M行每行包含三个整数 l, r, kl,r,k...原创 2018-06-11 20:01:07 · 194 阅读 · 0 评论 -
替罪羊树(模板)
传送门 替罪羊树,优秀的数据结构,关键思想是 假如这棵树长残了就拍扁重构成一棵二叉树,常数很小。alpha是一个平衡因子,用来判断这棵树是否长残,一般取0.5~0.9,比较玄学。代码#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;cstring&gt;#include&lt;algorithm&am原创 2018-09-13 21:36:52 · 271 阅读 · 0 评论 -
splay 模板 洛谷3369
题目描述您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:插入 xx 数 删除 xx 数(若有多个相同的数,因只删除一个) 查询 xx 数的排名(排名定义为比当前数小的数的个数 +1+1 。若有多个相同的数,因输出最小的排名) 查询排名为 xx 的数 求 xx 的前驱(前驱定义为小于 xx ,且最大的数) 求 xx 的后继(后继定义为大于 xx ,且最小...原创 2018-05-01 21:55:04 · 186 阅读 · 0 评论 -
树链剖分 (模板) 洛谷3384
题目描述如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作:操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z操作2: 格式: 2 x y 表示求树从x到y结点最短路径上所有节点的值之和操作3: 格式: 3 x z 表示将以x为根节点的子树内所有节点值都加上z操作4: 格式: 4 x 表示求以x为根节点的子树...原创 2018-04-29 20:36:46 · 105 阅读 · 0 评论 -
网络流之最大流 模板 (洛谷3376)
题目描述如题,给出一个网络图,以及其源点和汇点,求出其网络最大流。输入输出格式输入格式: 第一行包含四个正整数N、M、S、T,分别表示点的个数、有向边的个数、源点序号、汇点序号。接下来M行每行包含三个正整数ui、vi、wi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi)输出格式: 一行,包含一个正整数,即为该网络的最大流。输入输出样例输入样...原创 2018-05-01 21:49:50 · 211 阅读 · 0 评论 -
最短路 Dijkstra模板
普通dijkstra,复杂度O(n*n)#include<bits/stdc++.h>using namespace std;int n,m,f[105][105],dis[105]; bool b[105]; //n为总共的点数,m为路径数,f数组记录两个点的距离,dis数组记录每个点到原点的距离 int main(){ scanf("%d%d",&am...原创 2017-12-19 23:23:21 · 195 阅读 · 1 评论 -
spfa(模板)
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int cnt,st,ed,s,t,w,h[10005],dis[10005],stack[10005];int q[40005];struct Node{ int to,w,next;}edge[10005];//10005,1005转载 2017-12-17 20:17:51 · 141 阅读 · 0 评论 -
堆排(模板)
堆排序#include<bits/stdc++.h>using namespace std;const int MAXN=1005;int n,a[MAXN],f[MAXN],t,siz;inline void pus(int x){ f[++t]=x; int now=t; while(now>1){ if(f[now]>f[now/2]) brea原创 2017-12-17 20:19:07 · 155 阅读 · 0 评论 -
树的重心(模板)
#include<bits/stdc++.h>using namespace std;const int N = 20005;const int INF = 1<<30;int head[N],son[N],cnt,n,ans,size;bool vis[N];struct Edge { int to,next;} edge[2*N];void Init() { cn原创 2017-12-07 18:26:45 · 276 阅读 · 0 评论 -
邻接表(模板)
邻接表 struct Edge{ int to,next; //to表示点,next表示边};edge[505];void add_edge(int bg,int ed){ cnt++; edge[cnt].to=ed; edge[cnt].next=head[bg]; head[bg]=cnt;}原创 2017-11-30 18:19:28 · 565 阅读 · 0 评论 -
最小生成树(模板)洛谷3366
题目描述如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz输入输出格式输入格式: 第一行包含两个整数N、M,表示该图共有N个结点和M条无向边。(N<=5000,M<=200000)接下来M行每行包含三个整数Xi、Yi、Zi,表示有一条长度为Zi的无向边连接结点Xi、Yi输出格式: 输出包含一个数,即最小生成树的各边的长度之和;如果该图不连通则输出orz输入输出样例输入样例#1:原创 2018-01-01 22:43:24 · 192 阅读 · 0 评论 -
并查集(模板) 洛谷3367
题目描述如题,现在有一个并查集,你需要完成合并和查询操作。输入输出格式输入格式: 第一行包含两个整数N、M,表示共有N个元素和M个操作。接下来M行,每行包含三个整数Zi、Xi、Yi当Zi=1时,将Xi与Yi所在的集合合并当Zi=2时,输出Xi与Yi是否在同一集合内,是的话输出Y;否则话输出N输出格式: 如上,对于每一个Zi=2的操作,都有一行输出,每行包含一个大写字母,为Y或者N输入输出样例输入原创 2018-01-01 22:54:31 · 389 阅读 · 0 评论 -
线段树模板
定义 线段树是一种特殊的二叉树,每个节点代表原数组的一段区间,根节点代表整个区间,叶节点代表长度为1的区间。 一般应用: 利用线段树快速求区间的最值,求和等。 使用延迟标记可以很好地支持区间修改。 单次修改和查询的时间复杂度都是O(log n)。 一:题目描述如题,已知一个数列,你需要进行下面两种操作:1.将某区间每一个数加上x2.求出某...原创 2018-02-11 10:49:44 · 127 阅读 · 0 评论 -
二分图匹配 (匈牙利算法) 洛谷3386
题目背景二分图题目描述给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数输入输出格式输入格式: 第一行,n,m,e第二至e+1行,每行两个正整数u,v,表示u,v有一条连边输出格式: 共一行,二分图最大匹配输入输出样例输入样例#1: 复制 1 1 1 1 1 输出样例#1: 复制 1 说明n,m \leq 1000 n,m≤10...原创 2018-03-06 23:01:11 · 269 阅读 · 0 评论 -
高精度模板
#include<string>#include<iostream>#include<iosfwd>#include<cmath>#include<cstring>#include<stdlib.h>#include<stdio.h>#include<cstring>us转载 2018-02-24 16:09:59 · 103 阅读 · 0 评论 -
KMP 模板
题目描述如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置。为了减少骗分的情况,接下来还要输出子串的前缀数组next。(如果你不知道这是什么意思也不要问,去百度搜[kmp算法]学习一下就知道了。)输入输出格式输入格式: 第一行为一个字符串,即为s1第二行为一个字符串,即为s2输出格式: 若干行,每行包含一个整数,表示s2在s1中出现...原创 2018-03-13 23:40:10 · 111 阅读 · 0 评论 -
高斯消元 模板 (洛谷3389)
题目背景Gauss消元题目描述给定一个线性方程组,对其求解输入输出格式输入格式: 第一行,一个正整数 nn第二至 n+1n+1 行,每行 n+1n+1 个整数,为 a_1, a_2 \cdots a_na 1 ,a 2 ⋯a n 和 bb ,代表一组方程。输出格式: 共n行,每行一个数,第 ii 行为 x_ix ...原创 2018-05-02 20:16:02 · 127 阅读 · 0 评论 -
费用流 模板 洛谷3381
题目描述如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用。输入输出格式输入格式: 第一行包含四个正整数N、M、S、T,分别表示点的个数、有向边的个数、源点序号、汇点序号。接下来M行每行包含四个正整数ui、vi、wi、fi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi),单位流量的费用为...原创 2018-05-01 21:53:34 · 139 阅读 · 0 评论