模板
yxr0105
这个作者很懒,什么都没留下…
展开
-
Exgcd
#include<iostream>#include<cstdio>#include<cmath>#define ll long longll a,b;void exgcd(ll a,ll b,ll &x,ll &y){ if(b==0){x=1;y=0;} else {exgcd(b,a%b,y,x);y-=(a/b)*x;}}int main(){ //fr原创 2016-04-30 12:10:14 · 480 阅读 · 0 评论 -
bzoj3224 Tyvj 1728 普通平衡树 非旋转式Treap
bzoj3224 Tyvj 1728 普通平衡树 裸平衡树 仔细想想 以前从来没徒手种过树真是羞耻 倒是学过些 但从来没有实现过导致平衡树的一些普通操作开始也是一脸懵逼 普通平衡树的基本操作: rank(x,k): k的子树下 <=x的最大值 的排名 如果当前节点u的data == x 走左子树 更新tmp tmp是刨除重复元素的答案 如果当前节点u的data < x 走右子树 更新原创 2016-04-30 18:15:01 · 752 阅读 · 0 评论 -
【模板】可并堆
想学非旋转的Treap 然后看到里面提到斜堆 顺便学了学可并堆 可并堆 1.左偏树 左偏树 尽量使合并用枝更短。 左偏树的节点中保留了到外节点的距离。 (由于限制了右边的距离一定比左边的距离小或等, 所以当合并到达外节点的时候,右子树一定为空,这时合并操作就结束了) 这个距离相当于就是沿着这个分支合并下去还要的次数。 既然右边的距离小,那么每次就拿右边来合并。 而每递归完一层后,原创 2016-04-30 13:03:50 · 368 阅读 · 0 评论 -
【模板】Lucas定理
C(n,m)%p=(C(n%p,m%p)%p * C(n/p,m/p)%p)%p#include<iostream>#include<cstdio>#include<cstring>#define Mo 10007#define ll long longusing namespace std;const int N=10010;ll fac[N];ll n,m;void exgcd原创 2016-04-30 12:51:40 · 565 阅读 · 0 评论 -
【模板】图的割点
lrj dfn:发现时间 low:子树中可以追溯到最早的节点的发现时间#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int M=501000;const int N=101000;struct E {int to,nxt;}edge[M*原创 2016-04-30 12:47:47 · 315 阅读 · 0 评论 -
【模板】费用流
#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<algorithm>#define inf 0x7fffffffusing namespace std;const int M=1005,N=105;struct E{int to,cap,flow,cost,nxt;}edge[M*2原创 2016-04-30 12:45:51 · 237 阅读 · 0 评论 -
【模板】KMP
#include<iostream>#include<cstdio>#include<cstring>#define N 1000010using namespace std;char a[N],b[N];int f[N],j,ans;int main(){// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdou原创 2016-04-30 12:44:55 · 253 阅读 · 0 评论 -
【模板】RMQ
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;const int N=100010;int n,m,l;int a[N],f[N][20];int main(){// freopen("in.txt","r",stdin);// freopen("ou原创 2016-04-30 12:43:49 · 260 阅读 · 0 评论 -
【模板】后缀数组
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=100010;int t1[N],t2[N],sa[N],c[N];int Rank[N],height[N];char s[N];int n;void buildsa(int原创 2016-04-30 12:42:58 · 281 阅读 · 0 评论 -
【模板】tarjan
强连通分量 基于dfs序 dfn[i] : 节点i的发现时间 low[i] : i或i的子树能够追溯到的最早的栈中节点的次序号 http://www.cppblog.com/sosi/archive/2010/09/26/127797.aspx#include<iostream>#include<cstdio>#include<cstring>#include<stack>using原创 2016-04-30 12:42:09 · 268 阅读 · 0 评论 -
【模板】归并排序
归并排序求逆序对#include<iostream>#include<cstdio>#define ll long longusing namespace std;const int N=100010;ll ans=0;int c[N],a[N],n;void Merge(int l,int r){ int num=0; int mid=(l+r)/2; int原创 2016-04-30 12:38:05 · 322 阅读 · 0 评论 -
【模板】欧拉函数
欧拉函数:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn为x的所有素因数,x是不为0的整数。 求n及以前的自然数的欧拉函数 筛法求素数即可 求n的欧拉函数 O(sqrt(n))#include<iostream>#include<cstdio>#include<cmath>#define ll long lon原创 2016-04-30 12:37:00 · 362 阅读 · 0 评论 -
【模板】AC自动机
参考lrj白书#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;const int N=1000010;char S[N],SS[N];int n;struct AC{ queue<int>q; int ch[N][27]; int f[N]原创 2016-04-30 12:28:49 · 325 阅读 · 0 评论 -
【模板】dinic
#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<algorithm>#define inf 0x7fffffffusing namespace std;const int N=110,M=1100;struct E {int to,cap,flow,nxt;}edge[M*2];i原创 2016-04-30 12:27:32 · 258 阅读 · 0 评论 -
【模板】LCA
tarjan+并查集 离线LCA O(n) dfs 树 当访问完节点u及其子树时 将u和他的父亲加入同一个集合 此时祖先为u的父亲 这样对于一个询问 (u,v) 访问完u及其子树时 若 尚未访问完v及其子树 那么暂时不查询 访问v及其子树时查询 若已未访问完v及其子树 那么ans=find(v)其实主要用的是dfs序吧 并不知道和tarjan有什么关系= = 离线LCA 讲解#incl原创 2016-04-30 12:26:27 · 261 阅读 · 0 评论 -
【模板】SPFA Dijkstra+Heap(priority_queue)
SPFA#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;const int M=500010;const int N=100010;struct E {int to,nxt,w;}edge[M];queue<int>q;bool vis[N];int idx原创 2016-04-30 12:13:40 · 674 阅读 · 0 评论 -
【模板】莫队算法
题意:给定一个大小为N的数组,数组中所有元素的大小<=N。你需要回答M个查询。每个查询的形式是L,R,K。你需要回答在范围[ L,R ]中至少重复K次的数字的个数。N,M<=100000 诶,这题卡了好久,TLE,中间弃了一段,然后今天学弟学莫队,拿出这个题,他也没什么想法,然后我顿时退一步海阔天空了。 最开始的想法是:莫队排序,当前区间[l,r]->[l+1,r],修改一个点,有两个点的cnt原创 2016-05-20 22:02:34 · 3790 阅读 · 0 评论