算法模板
一些有关于算法模板的文章。
youngsea8
喜欢学习!
展开
-
gcd
gcdgcd(a,b)=gcd(b,a mod b)边界条件:gcd(a,0)=agcd(a,b) * lcm(a,b)=a*b于是求lcm:a/gcd(a,b)*b;先除保证中间结果不会溢出//递归写法int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}//求a%b余数int gcd(int a, int b){ i...原创 2019-07-16 19:09:08 · 2798 阅读 · 1 评论 -
素数筛
欧拉筛法打表素数定理:π(x)~x/ln(x)不超过x的素数有π(x)个//埃氏筛法//筛出不超过MAX的素数const int MAX=100005;int visited[MAX];int prime[MAX], cnt0;//筛出的素数的个数void make_prime(){ memset(visited,0,sizeof(visited)); fo...原创 2019-07-16 19:11:41 · 178 阅读 · 0 评论 -
同模与模算术
同模与模算术(a+b) mod n=((a mod n)+(b mod n))mod n(a-b) mod n=((a mod n)-(b mod n)+n)mod nab mod n=(a mod n)(b mod n)mod n注意乘法中(a mod n)(b mod n)是否会超出int的范围//乘法求模函数int mulMod(int a, int b, int n){...转载 2019-07-16 19:12:38 · 1565 阅读 · 0 评论 -
拓展欧几里得算法
拓展欧几里得算法//拓展欧几里得算法/*找出整数对(x,y),使得ax+by=gcd(a,b),(x,y)可以为负数或者0*/void gcd(int a,int b,int &d,int &x,int &y){ if(!b){d=a;x=1;y=0;} else { gcd(b,a%b,d,y,x);y-=x*(a/b)...原创 2019-07-16 19:13:06 · 160 阅读 · 0 评论 -
线段树
线段树线段树链接typedef struct tree{ int summ;//和 int lc,rc;//左右孩子的下标 tree():summ(0),lc(0),rc(0){}}Tree,*PTree;//递归建树//l,r代表线段的左右两边//以i为根节点建树void build(int i,int l,int r)//初始化build(1,1,n){...转载 2019-07-16 19:13:45 · 127 阅读 · 0 评论 -
快速幂
时间复杂度:求a^n复杂度:O(log(n))typedef long long ll;ll mod_pow(ll x,ll n,ll mod){ ll res=1; while (n>0) { if(n&1) res=res*x%mod;//n&表示n/2 x=x*x%mod; ...转载 2019-07-20 10:30:47 · 59 阅读 · 0 评论 -
归并排序求逆序对
归并排序求逆序对归并排序求逆序对#include <algorithm>#include <cstdio>#include <cstring>#include <iostream>using namespace std;#define N 1000005int a[N], help[N];//help为辅助数组long long...转载 2019-07-20 10:33:32 · 76 阅读 · 0 评论 -
单调队列
单调队列A - Sliding WindowAn array of size which is moving from the very left of the array to the very right. You can only see theknumbers in the window. Each time the sliding window moves rightward...转载 2019-07-20 10:35:25 · 675 阅读 · 0 评论