数据结构
AC-PEACE
这个作者很懒,什么都没留下…
展开
-
归并排序解决逆序对的数量问题
将序列从中间分开,将逆序对分成三类:两个元素都在左边;两个元素都在右边;两个元素一个在左一个在右;原创 2022-07-18 12:04:11 · 97 阅读 · 0 评论 -
归并排序思路及例题
//第一步:找到分界点,分成子问题 int mid = l + r >> 1; //第二步:递归处理子问题 merge_sort(q, l, mid); merge_sort(q, mid + 1, r); //第三步:*合并子问题*原创 2022-07-17 15:54:43 · 121 阅读 · 0 评论 -
快速排序·例题二
给定一个长度为n的整数数列,以及一个整数k,请用快速选择算法求出数列从小到大排序后的第k个数。原创 2022-07-13 12:27:24 · 371 阅读 · 0 评论 -
快速排序例题
快排属于分治算法,分治算法一般分为三步:1. 分成子问题2. 递归处理子问题3. 子问题合并原创 2022-07-13 12:12:12 · 764 阅读 · 0 评论 -
DFS 之 全排列
题目描述给定一个整数 n,将数字 1 ∼ n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数 n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围: 1 ≤ n ≤ 7输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1https://www.acwing.com/problem/content/844/思路:dfs深度优先遍历的思想比较简.原创 2022-03-31 21:26:45 · 1423 阅读 · 0 评论 -
哈希表【数组模拟散列表】(开放寻址法和拉链法)
例题描述:维护一个集合,支持如下几种操作:I x,插入一个数x; Q x,询问数x是否在集合中出现过;现在要进行 N 次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数 N,表示操作数量。接下来 N 行,每行包含一个操作指令,操作指令为 I x,Q x 中的一种。输出格式对于每个询问指令 Q x,输出一个询问结果,如果 x 在集合中出现过,则输出 Yes,否则输出 No。每个结果占一行。数据范围: 1 ≤ N ≤ 1051 −10^9 ≤...原创 2022-03-28 22:41:53 · 151 阅读 · 0 评论 -
堆排序(用数组模拟小根堆)
输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。输入格式第一行包含整数 n 和 m。第二行包含 n 个整数,表示整数数列。输出格式共一行,包含 m 个整数,表示整数数列中前 m 小的数。数据范围1 ≤ m ≤ n ≤ 1051,1 ≤ 数列中元素 ≤ 1091输入样例:5 34 5 1 3 2输出样例:1 2 3原题链接:https://www.acwing.com/problem/content/840/#include<.原创 2022-03-26 23:28:23 · 1806 阅读 · 0 评论 -
并查集维护树的深度(即每个点到根节点的距离)
题目:食物链描述:动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B,B吃C,C吃A。现有N个动物,以 1 ∼ N编号。每个动物都是A,B,C 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是1 X Y,表示X和Y是同类。第二种说法是2 X Y,表示X吃Y。此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,...原创 2022-03-26 13:57:59 · 255 阅读 · 0 评论 -
连通块中 点的数量
题目描述:给定一个包含n 个点(编号为1∼n)的无向图,初始时图中没有边。现在要进行m个操作,操作共有三种:C a b,在点aa和点bb之间连一条边,a和b可能相等; Q1 a b,询问点a和点b是否在同一个连通块中,a和b可能相等; Q2 a,询问点a所在连通块中点的数量;输入格式第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为C a b,Q1 a b或Q2 a中的一种。输出格式对于每个询问指令Q1...原创 2022-03-24 23:11:23 · 381 阅读 · 1 评论 -
并查集之合并集合
题目描述:一共有 n个数,编号是 1∼n,最开始每个数各自在一个集合中。现在要进行 m个操作,操作共有两种:M a b,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作; Q a b,询问编号为a和bb的两个数是否在同一个集合中;输入格式第一行输入整数 n 和 m。接下来m行,每行包含一个操作指令,指令为M a b或Q a b中的一种。输出格式对于每个询问指令 Q a b,都要输出一个结果,如果 a 和 b ...原创 2022-03-24 13:29:00 · 71 阅读 · 0 评论 -
二阶差分(注意数据范围)
题目描述小明在练习绝世武功,nn个练功桩排成一排,一开始每个桩的损伤为00。接下来小明会练习mm种绝世武功,每种武功都会对[l, r][l,r]区间分别造成[s,e][s,e]的伤害。这个伤害是一个等差序列。例如l = 1, r = 4, s = 2, e = 8l=1,r=4,s=2,e=8,则会对1-41−4号练功桩造成2, 4, 6, 82,4,6,8点损伤。小明想让你统计一下所有练功桩的损伤的和。输入描述第一行输入n, mn,m,代表练功桩的数量...原创 2022-03-22 22:04:30 · 3089 阅读 · 0 评论 -
Trie字符串插入与统计
原题链接:https://www.acwing.com/problem/content/837/#include<iostream>using namespace std;const int N = 100010;int son[N][26], cnt[N], idx = 0;//作用分别为:存子节点、存节点数、开辟即将用到的的新节点char str[N];void insert(char str[])//不需要返回数值,函数类型定义为void{ int p...原创 2022-03-22 14:49:45 · 478 阅读 · 0 评论 -
滑动窗口
原题链接:https://www.acwing.com/problem/content/156/#include<iostream>using namespace std;const int N = 1000010;int a[N], q[N];//q存的是下标int main(){ int n, k; scanf("%d%d", &n, &k); for(int i = 0; i < n; i ++) sca...原创 2022-03-20 19:52:54 · 54 阅读 · 0 评论 -
用数组模拟队列
原题链接:https://www.acwing.com/problem/content/831/#include<iostream>using namespace std;const int N = 100010;int tt, hh, q[N];int main(){ int m; cin >> m; while(m --) { string a; cin >> a;...原创 2022-03-18 20:04:34 · 51 阅读 · 0 评论