随手贴模板
吃货妍
努力学习中
展开
-
gcd+lcm+快速幂
gcd: int gcd(int x,int y) { return y==0?x:gcd(y,x%y); } lcm: x*y/gcd(x,y); 01:快速幂 02.LL fun(LL x,LL n,) 03.{ 04. LL res=1; 05. while(n>0) 06. { 07.原创 2016-03-28 20:51:08 · 461 阅读 · 0 评论 -
倍增lca
void dfs(int u,int f,int d) { deep[u]=d; for(int i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].to; if(v==f)continue; anc[v][0]=u; dfs(v,u,d+1); } } voi原创 2017-07-21 15:39:56 · 245 阅读 · 0 评论 -
Hrbust 2311(Swiss-system tournament)归并排序
Swiss-system tournament Time Limit: 2000 MS Memory Limit: 131072 K Total Submit: 36(6 users) Total Accepted: 7(4 users) Rating: Special Judge: No Description A Swiss-system tournament is a t原创 2017-04-29 12:02:55 · 312 阅读 · 0 评论 -
预处理C(n,m)
LL fac[1000005]; //阶乘 LL inv_of_fac[1000005]; //阶乘的逆元 LL qpow(LL x,LL n) { LL ret=1; for(; n; n>>=1) { if(n&1) ret=ret*x%mod; x=x*x%mod; } return r原创 2017-03-19 20:53:58 · 694 阅读 · 0 评论 -
FFT
设集合A,B,C. C=x+y(x∈A,y∈B)求C集合const double PI = acos(-1.0); struct complex { double r,i; complex(double _r = 0,double _i = 0) { r = _r; i = _i; } complex operator +(c原创 2016-12-09 20:44:35 · 752 阅读 · 0 评论 -
SPFA
const int N=1005; int vis[N]; int dis[N]; int head[N<<1]; int n,m,t,cont,x,y,z; int ans; struct node { int to,next,cost; }edge[N*N*2]; void add(int from,int to,int cost) { edge[cont].to=to;原创 2016-11-21 19:31:47 · 386 阅读 · 0 评论 -
RMQ(快速查询区间最值)
#include #include #include #include #include #define ll long long using namespace std; const int maxn=5e4+10; int maxnum[maxn][20]; int minnum[maxn][20]; void RMQ(int num) { for(int j=1;j<20;原创 2016-10-07 18:02:17 · 296 阅读 · 0 评论 -
01字典树模板
#include unordered_map data[30]; void update(int v, int c){//v是数,c取1 -1,1为加,-1为删。 for(int i = 0; i >i] += c; } int query(int x){ int cur = 0; for(int i = 29; i >= 0; i--){ cur ^=原创 2016-08-14 22:46:31 · 701 阅读 · 0 评论 -
还是主席树
Source Code Problem: 2104 User: congrizheng Memory: 22656K Time: 1532MS Language: G++ Result: Accepted •Source Code #include #include #include #include #include #include #include #includ原创 2016-09-07 13:44:07 · 352 阅读 · 0 评论 -
大区间统计素数(最大1e11)
#include using namespace std; typedef long long LL; const int N = 5e6 + 2; bool np[N]; int prime[N], pi[N]; int getprime() { int cnt = 0; np[0] = np[1] = true; pi[0] = pi[1] = 0; fo原创 2016-09-19 21:25:57 · 694 阅读 · 0 评论 -
字典树模板
typedef struct dot { bool flag;//一个单词的结尾字母 dot *next[maxn]; int v;//经过这个字母的单词有几个 }T; dot root; dot *newNode() { dot *temp=new dot; temp->v=1; temp->flag=false; for(int i=0;i<maxn;i++)原创 2016-08-13 16:17:29 · 353 阅读 · 0 评论 -
可修改主席树
#include #include #include #include #define lson l,m #define rson m+1,r using namespace std; const int N=60005; int a[N],Hash[N]; int L[N<<5],R[N<<5],sum[N<<5]; int S[N],T[N]; int n,m,tot; struct n原创 2016-08-31 19:15:00 · 493 阅读 · 0 评论 -
Dij+堆优化
struct rec { int v,w;//终点,花费。 }; vector edge[N*2];//起点,注意清空 struct cmp { bool operator()(int a,int b) { return dis[a]>dis[b]; } }; void add(int x,int y) { edge[x].push_back原创 2016-09-12 13:19:51 · 1827 阅读 · 0 评论 -
Floyd判圈算法
#include #include #include int main() { int k1=k,k2=k; int ans=k; do { k1=next(n,k1); k2=next(n,k2); if(k2>ans) ans=k2; k2=next(n,k2);原创 2016-08-28 11:27:57 · 606 阅读 · 0 评论 -
线段树单标记,双标记
单标记(区间维护)#include #include #include #include #include #include #define LL long long #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define maxn 111111 using namespace std; LL sum[maxn<<2]; LL原创 2016-08-05 22:48:23 · 1095 阅读 · 0 评论 -
01 完全 多重 背包模板
void ZeroOnePack(int cost,int weight) { int v; for(v=V;v>=cost;v--) f[v]=max(f[v],f[v-cost]+weight); } void CompletePack(int cost,int weight) { int v; for(v=cost;v<=V;v++) f[v]原创 2016-08-02 13:38:29 · 425 阅读 · 0 评论 -
矩阵快速幂
struct Matrix { ll m[sz][sz]; }; Matrix Mul(Matrix a,Matrix b) { Matrix c; memset(c.m,0,sizeof(c.m)); for(int i=0; i<sz; i++) for(int j=0; j<sz; j++) for(int k=0; k<原创 2017-07-19 19:19:07 · 164 阅读 · 0 评论