![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
J-Proton
这个作者很懒,什么都没留下…
展开
-
并查集 模板
一共有n个数,编号是1~n,最开始每个数各自在一个集合中。现在要进行m个操作,操作共有两种:“M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;“Q a b”,询问编号为a和b的两个数是否在同一个集合中;输入格式第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为“M a b”或“Q a b”中的一种。输出格式对于每个询问指...原创 2019-10-18 20:37:33 · 202 阅读 · 0 评论 -
KMP 算法模板(背)
#include<iostream>using namespace std;const int N = 100010,M = 10010;char p[M],q[N];int m,n;int ne[N];int main(){ cin>>n>>p + 1>> m>> q + 1; for(int i = 2,...原创 2019-10-18 19:07:19 · 98 阅读 · 0 评论 -
滑动窗口模板 单调栈
给定一个大小为n≤106n≤106的数组。有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。您只能在窗口中看到k个数字。每次滑动窗口向右移动一个位置。以下是一个例子:该数组为[1 3 -1 -3 5 3 6 7],k为3。窗口位置 最小值 最大值[1 3 -1] -3 5 3 6 7 -1 31 [3 -1 -3] 5 3 6 7 -3 31 3 [-1 -3 5] 3 6...原创 2019-10-10 16:19:04 · 131 阅读 · 0 评论 -
单调栈模板
#include<iostream>using namespace std;const int N = 100010;int stk[N],tt,n;int main(){ cin>>n; for(int i = 0; i < n;i ++){ int x; cin>>x; while...原创 2019-10-09 20:15:17 · 110 阅读 · 0 评论 -
用数组模拟双链表
#include<iostream>using namespace std;const int N = 100010;int l[N],r[N],e[N],idx;void add(int k,int x){ e[idx] = x; l[idx] = k; r[idx] = r[k]; l[r[k]] = idx; r[k] = idx;...原创 2019-10-08 19:51:20 · 171 阅读 · 0 评论 -
用数组模拟单链表
```c#include<iostream>using namespace std;const int N = 100010;int n[N],ne[N],head,idx;void init(){ head = -1; idx = 0;}void insert(int x){ n[idx] = x; ne[idx] = head; ...原创 2019-10-08 16:17:35 · 127 阅读 · 0 评论 -
一维差分数组 模板
#include<iostream>using namespace std;const int N = 100010;int a[N],b[N];void insert(int l,int r,int c){ b[l]+=c; b[r+1]-=c;}int main(){ int n,m; cin>>n>>m; ...原创 2019-09-23 16:14:50 · 282 阅读 · 0 评论 -
前缀和 子矩阵的和 模板
#include<iostream>using namespace std;const int N = 1010;int a[N][N],s[N][N];int main(){ int m , n ,k; cin>>m>>n>>k; for(int i = 1;i <= m;i++) ...原创 2019-09-22 11:04:47 · 188 阅读 · 0 评论 -
整数二分 模板
给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回“-1 -1”。输入格式第一行包含整数n和q,表示数组长度和询问个数。第二行包含n个整数(均在1~10000范围内),表示完整数组。接下来q行,每行包含一个整数k,表示一个询问元素。输出格式共q行,每行包含两个整数,表示所求...原创 2019-09-19 19:48:20 · 257 阅读 · 0 评论 -
高精度除法 模板
#include<iostream>#include<vector>#include<algorithm>using namespace std;vector<int>div(vector<int>&a,int b,int &r){ vector<int>c; for(int i = a...原创 2019-09-19 19:02:38 · 169 阅读 · 0 评论 -
高精度乘法
#include<iostream>#include<vector>using namespace std;vector<int> mul(vector<int> &A,int B){ vector<int>c; for(int i = 0,t = 0;i < A.size()||t;i++){ ...原创 2019-09-19 17:19:01 · 103 阅读 · 0 评论 -
高精度减法 模板
#include<iostream>#include<vector>using namespace std;const int N = 100000;bool cmp(vector<int> &a,vector<int> &b){ if(a.size()!=b.size())return a.size()>b.s...原创 2019-09-19 16:26:36 · 154 阅读 · 0 评论 -
归并排序模板
#include<iostream>using namespace std;const int N = 100000;int a[N],n;void merge_sort(int a[],int l,int r ){ if(l>=r)return; int mid = l+r>>1; merge_sort(a,l,mid),merge_...原创 2019-09-19 10:49:56 · 74 阅读 · 0 评论 -
高精度加法算法模板
#include<iostream>#include<vector>using namespace std;vector<int>add(vector<int> &a,vector<int> &b){ vector<int>c; int t =0; for(int i = 0;i&...原创 2019-09-18 14:23:24 · 122 阅读 · 0 评论 -
归并排序模板
void merge_sort(int a[],int l,int r){ if(l>=r)return; int mid = (l+r)>>1; merge_sort(a,l,mid); merge_sort(a,mid+1,r); int i = l,j = mid+1,k=0; while(i<=mid&&...原创 2019-09-17 14:50:16 · 75 阅读 · 0 评论 -
快速排序模板
void quicksort(int a[],int l,int r){ if(l>=r)return; int i = l-1,j = r+1,x = a[(l+r)/2]; while(i<j){ do i++;while(a[i]<x); do j--;while(a[j]>x); if(i<...原创 2019-09-17 12:53:58 · 116 阅读 · 0 评论