![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
模板
北屿小智障
喜欢有阳光的早晨
好像什么都可以重新再来。
展开
-
模板_快速幂
#include<cstdio>#include<iostream>using namespace std;long long a,b,c,ans=1;void quick_pow(long long a,long long b,long long c){ ans=1; while(b>0){ if((b&1)==1) ans=(ans*a)%c;原创 2015-11-04 10:26:18 · 435 阅读 · 0 评论 -
模板_Lucas定理
long long fac[N];long long n,m,p;void init(){fac[0]=1;for(int i=1;i<=p;i++) fac[i]=fac[i-1]*i%p;}long long pow(long long a,long long b,long long res=1){ while(b){if(b&1) res=res*a%p;a=a*a%p,b>>=1原创 2016-03-01 20:03:39 · 824 阅读 · 0 评论 -
模板_树状数组(BIT)
//开两个数组,a数组存数据,c数组存前x个数的和 核心运算 //i节点若是左儿子,父节点为i+lowbit(i); //i节点若是右儿子,父节点为i-lowbit(i);int lowbit(int x){ return x&(-x);}区间修改void add(int x,int d){ while(x<=n){ c[x]+=d;x+=lowbit(x);原创 2015-11-04 16:31:01 · 522 阅读 · 0 评论 -
模板_Splay Tree
#include<cstdio>#include<cstdlib>#include<iostream>using namespace std;struct Node{ Node* ch[2]; int r,v,s; Node(int v):v(v){ch[0]=ch[1]=NULL;r=rand();s=1;} bool operator < (const N原创 2016-02-02 17:06:21 · 265 阅读 · 0 评论 -
模板_Treap
传送门#include<cstdio>#include<cstdlib>#include<iostream>using namespace std;struct Node{ Node *ch[2];//左右子树 int r,v,s; //随机优先值,值,节点总数 Node(int v):v(v){ch[0]=ch[1]=NULL;r=rand();s=1;}原创 2016-02-02 15:13:19 · 351 阅读 · 0 评论 -
模板_网络流
首先来一个简单的EdmondsKarp算法,跟SPFA很像,BFS找最短路#include<cstdio>#include<cstring>#include<vector>#include<queue>#include<climits>#include<iostream>using namespace std;#define N 205struct Edge{ int fr,原创 2016-01-08 19:11:06 · 338 阅读 · 0 评论 -
模板_后缀数组
#define N 200005int t1[N],t2[N],c[N];int sa[N],rk[N],ht[N];int n,m=27,len;int s[N];void sort(int *x,int *y){ for(int i=0;i<m;i++) c[i]=0; for(int i=0;i<n;i++) c[x[y[i]]]++; for(int i=1;原创 2016-03-30 10:45:59 · 337 阅读 · 0 评论 -
模板_主席树
主席树是一个十分简单的数据结构,可以统计区间中的第k大,通过线段树的加减来实现,有n棵线段树来维护,S表示数的种数,线段树维护的就是每种数的个数 关于主席树讲解:传送门struct Node{ Node *ch[2];int size; Node(){ch[0]=ch[1]=NULL,size=0;} Node(Node *ch0,Node *ch1,int s){原创 2016-02-21 13:10:42 · 610 阅读 · 0 评论 -
模板_树链剖分
#define lc (o<<1)#define rc ((o<<1)|1)#define m ((l+r)>>1)struct Edge{int to,next;}edge[N*2];int head[N],cnt;//邻接表 int top[N],deep[N],son[N],f[N],size[N],s[N];//top表示重链顶点,deep表示深度,son表示重儿子,f表示父节点,原创 2016-02-24 19:45:47 · 342 阅读 · 0 评论 -
模板_LinkCutTree
#define N 10005struct LinkCutTree{ int n,m;int f[N],ch[N][2],s[N],a[N],rev[N]; inline bool is_root(int o){return (!f[o])||(o!=ch[f[o]][0]&&o!=ch[f[o]][1]);} inline void Updata(int o){原创 2016-02-27 19:49:31 · 512 阅读 · 0 评论 -
模板_高斯消元
void gauss(){ for(int i=1;i<=n;i++){ int r=i; for(int j=i+1;j<=n;j++) if(fabs(a[j][i])>fabs(a[r][i])) r=j; if(r!=i) for(int j=1;j<=n+1;j++) swap(a[r][j],a[i][j]); fo原创 2016-02-27 20:48:04 · 364 阅读 · 0 评论 -
模板_计算几何
没用过 谨慎使用,如有错误请告诉我修改QuQ 留言或者QQ729320011#include<cstdio>#include<cmath>#include<iostream>using namespace std;struct Point{ double x,y; Point(double x=0,double y=0):x(x),y(y){}};typedef Poi原创 2016-03-13 14:46:05 · 261 阅读 · 0 评论 -
模板_点分治
struct Node{int v,l;};vector<Node> g[N];int n,k,ans,sz,root,s[N],d[N],f[N];bool b[N];vector<int> deep;void GetRoot(int u,int fa){ s[u]=1,f[u]=0;int lim=g[u].size(); for(int i=0,v;i<lim;i++)原创 2016-03-13 14:51:03 · 455 阅读 · 0 评论 -
模板_KD-Tree
struct Node{int d[2],mi[2],ma[2],ch[2];}p[N<<1],now;int n,m,D,cnt,root,ans;inline int cmp(Node a,Node b){return a.d[D]<b.d[D];}inline void push_up(int o){ p[o].mi[0]=min(p[o].d[0],min(p[lc].mi[0原创 2016-03-14 21:45:58 · 856 阅读 · 0 评论 -
模板_DancingLink(Algorithm X)
关于舞蹈链(DLX)原理传送门#include<cstdio>#include<cstring>#define N 9*9*9*9*9*4+10#define M 9*9*9+10struct DancingLink{ int n,s,ansd;//列数 节点总数 int S[M],A[M],H[M];//S[]该列节点总数 A[]答案 H[]行首指针 int原创 2016-02-06 23:17:13 · 1181 阅读 · 0 评论 -
模板_Splay Tree
特别谢明:zky学长OuO Blog传送门#include<cstdio>#include<climits>#include<cstdlib>#include<iostream>using namespace std;#define INF INT_MAX/3*2struct SplayTree{ struct Node{ Node *ch[2];原创 2016-02-03 19:59:49 · 458 阅读 · 0 评论 -
模板_LCA(最近公共祖先)
倍增算法#include<cstdio>#include<vector>#include<algorithm>#include<iostream>using namespace std;#define N 100005#define M 21struct LCA{ vector<int> g[N]; int root,ans,n,m; int d[N],f[N]原创 2016-01-11 18:34:20 · 493 阅读 · 0 评论 -
模板_RMQ(范围最小值问题)
读入处理,d[i][j]数组存第i到2^j的最小值void RMQ_init(const vector<int> &A){ int n=a.size(); for(int i=0;i<n;i++) d[i][0]=A[i]; for(int j=1;(1<<j)<=n;j++) for(int i=0;i+(1<<j)-1<n;i++)原创 2015-11-04 17:42:28 · 473 阅读 · 0 评论 -
模板_线段树
最小值查询int ql,qr;//查询[ql,qr]最小值int query(int o,int l,int r){ int m=l+(l+r)/2,ans=INF; if(ql<=l&&qr>=r) return minv[o];//包含 if(ql<=m) ans=min(ans,query(o*2,l,m));//left if(m<qr) ans=min(a原创 2015-11-05 09:52:10 · 401 阅读 · 0 评论 -
模板_二叉树先序中序遍历求后序遍历
#include<cstdio>#include<cstring>#include<iostream>using namespace std;string s1,s2;void calc(int l1,int r1,int l2,int r2){ int m=s2.find(s1[l1]); if(m>l2) calc(l1+1,l1+m-l2,l2,m-1); i原创 2015-10-28 21:58:15 · 567 阅读 · 0 评论 -
模板_二叉树建立与遍历
样例输入:1 2 4 7 0 0 0 5 0 0 3 0 6 8 0 0 9 0 0 输出 124753689 742513869 745289631#include<cstdio>#include<iostream>using namespace std;typedef struct node;typedef node * tree;struct node{ int d原创 2015-10-28 21:48:50 · 574 阅读 · 0 评论 -
模板_高精度
已重载运算符,直接复制计算即可#include<cstdio>#include<cstring>#include<cmath>#include<climits>#include<algorithm>#include<vector>#include<stack>#include<queue>#include<iostream>using namespace std;#define M原创 2016-01-13 20:46:46 · 410 阅读 · 2 评论 -
模板_最短路算法
Floyed-Warshall (n^3)for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i!=j&&i!=k&&j!=k) if(dis[i][j]<dis[i][k]+dis[k][j])原创 2016-01-17 21:32:07 · 336 阅读 · 0 评论 -
模板_KMP算法
字符串匹配 next数组是k的寻找最长前缀后缀 反正我也讲不明白qwq 神犇传送门从头到尾彻底理解KMP#include<cstdio>#include<cstring>#include<iostream>using namespace std;#define N 100005int next[N];char a[N],b[N];int main(){ scanf("%s原创 2015-11-25 18:58:07 · 384 阅读 · 0 评论 -
高精度_大整数开根
手动开根号的基本方法:将被开方数从右向左每隔2位用撇号分开;从左边第一段求得算数平方根的第一位数字;从第一段减去这个第一位数字的平方,再把被开方数的第二段写下来,作为第一个余数;把所得的第一位数字乘以20,去除第一个余数,所得的商的整数部分作为试商(如果这个整数部分大于或等于10,就改用9左试商,如果第一个余数小于第一位数字乘以20的积,则得试商0);把第一位数字的20倍加上试商的和,乘以转载 2015-10-12 20:40:51 · 1746 阅读 · 3 评论 -
模板_优先队列
在优先队列中,优先级高的元素先出队列。 标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。 优先队列的第一种用法,也是最常用的用法:priority_queue<int> qi;通过<操作符可知在整数中元素大的优先级高。 故示例1中输出结果为:9 6 5 3 2第二种方法: 在示例1中,如果我们要把元素从小到大输出怎么办呢? 这时我们可以传入一个比较函数,使用functional原创 2015-12-08 20:17:39 · 319 阅读 · 0 评论 -
模板_zkw线段树
搞了一下午zkw线段树,思路有点混乱zkw线段树速度确实快!十分快!可是应用其实很有限(我太沙茶,貌似还能当Treap用?负数是硬伤RMQ问题,可惜解决不了负数int n,M,q;int d[N2];inline void Build(int n){ for(M=1;M1;M1);for(int i=M+1;iin(); for(int i=M-1;i;--i)原创 2016-03-24 20:01:50 · 554 阅读 · 0 评论