12.9(快速幂、龟速加)

快速幂 // a^k%p int qmi(int a, int k, int p) {    int res = 1;    while(k)   {        if(k&1) res = res * a % p;        a = a*a %p;        k>>=1;


12.4(区间合并)

区间合并 原理 贪心 模板代码 // 将所有存在交集的区间合并 void merge(vector<PII> &segs) { vector<PII> res; sort(segs.begin(), segs.end()); int st = -2e9, ed =


11.29(双指针)

双指针算法 使用环境 1、两个指针法分别指向两个序列 2、两个指针维护一段区间 时间复杂度 O(n) 模板代码 for(int i=0,j=0;i<n;i++) { while(j<i&&check(i,j)) j++; } 最长连续不重复子序列题目链接 799. 最长连续不重复子序列 -


11.22(并查集)

并查集 1、将两个集合合并 2、询问两个元素是否在一个集合当中 基本原理:每个集合用一棵树来表示。树根的编号就是整个集合的编号。每个节点存储它的父节点,p[x]表示x的父节点。


11.21(dps)

排列数字题目链接 842. 排列数字 - AcWing题库 排列数字题目类型 dps 排列数字代码 #include<iostream> using namespace std; const int N = 10; int n; int path[N]; bool st[N]; void df


11.19(kmp)

KMP 暴力算法怎么做 S[N], p[M] for(int i=1;i<=n;i++) { bool flag=true; for(int j=1;j<=m;j++) { if(s[i+j-1]!=p[j]) { fl