随笔分类 - 基础算法模板
摘要:输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。 #include <iostream> using namespace std; const int N = 1e5 + 10; int n, m, len; int h[N]; void down (int u) { int t = u
阅读全文
摘要:动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。 A 吃 B,B 吃 C,C 吃 A。 现有 N 个动物,以 1∼N 编号。 每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这 N个动物所构成的食物链关系进行描述: 第一种说法是 1 X Y
阅读全文
摘要:给定一个数组。 有一个大小为k 的滑动窗口,它从数组的最左边移动到最右边。 你的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。 #include <iostream> #include <deque> using namespace std; const int N = 1e6 + 10
阅读全文
摘要:给定一个长度为 n 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。 #include <iostream> #include <stack> using namespace std; int n; stack <int> st; int main() { cin >> n; w
阅读全文
摘要:实现一个队列,队列初始为空,支持四种操作: push x – 向队尾插入一个数 xx; pop – 从队头弹出一个数; empty – 判断队列是否为空; query – 查询队头元素。 现在要对队列进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。 #include <iost
阅读全文
摘要:给定一个表达式,其中运算符仅包含 +,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。 #include <iostream> #include <stack> #include <unordered_map> using namespace std; unordered_ma
阅读全文
摘要:实现一个栈,栈初始为空,支持四种操作: push x – 向栈顶插入一个数 xx; pop – 从栈顶弹出一个数; empty – 判断栈是否为空; query – 查询栈顶元素。 现在要对栈进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果 #include <iostream>
阅读全文
摘要:实现一个双链表,双链表初始为空,支持5 种操作: 在最左侧插入一个数; 在最右侧插入一个数; 将第k 个插入的数删除; 在第k 个插入的数左侧插入一个数; 在第 k 个插入的数右侧插入一个数 现在要对该链表进行 M次操作,进行完所有操作后,从左到右输出整个链表。 #include <iostream
阅读全文
摘要:实现一个单链表,链表初始为空,支持三种操作: 向链表头插入一个数; 删除第 kk 个插入的数后面的数; 在第 kk 个插入的数后插入一个数。 现在要对该链表进行 MM 次操作,进行完所有操作后,从头到尾输出整个链表。 #include <iostream> using namespace std;
阅读全文
摘要:给定 nn 个区间 [l,r],要求合并所有有交集的区间。 注意如果在端点处相交,也算有交集。 输出合并完成后的区间个数。 #include <iostream> #include <algorithm> #include <climits> using namespace std; const i
阅读全文
摘要:给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。 #include <iostream> using namespace std; int lowbit (int x) { return x & (-x); } int main() { int n; scanf ("%d
阅读全文
摘要:给定一个长度为 nn 的整数序列 a1,a2,…,an以及一个长度为 m 的整数序列 b1,b2,…,bm。 请你判断 a 序列是否为 b 序列的子序列。 #include <iostream> #include <cstring> using namespace std; const int N
阅读全文
摘要:给定两个升序排序的有序数组 A 和 B,以及一个目标值 x。 数组下标从 0 开始。 请你求出满足 A[i]+B[j]=x 的数对 (i,j)。 数据保证有唯一解。 #include <iostream> #include <cstdio> using namespace std; const in
阅读全文
摘要:给定一个长度为n 的整数序列,请找出最长的不包含重复的数的连续区间长度。 #include <iostream> #include <unordered_map> using namespace std; const int N = 100010; int a[N]; unordered_map<i
阅读全文
摘要:输入一个 n 行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1) 和 (x2,y2)表示一个子矩阵的左上角坐标和右下角坐标。 每个操作都要将选中的子矩阵中的每个元素的值加上 c。 请你将进行完所有操作后的矩阵输出。 #include <i
阅读全文
摘要:输入一个长度为 n 的整数序列。 接下来输入 m 个操作,每个操作包含三个整数 l,r,c,表示将序列中 [l,r] 之间的每个数加上 c。 请你输出进行完所有操作后的序列。 #include <iostream> using namespace std; const int N = 100010;
阅读全文
摘要:输入一个 n行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。 输出子矩阵中所有数的和。 #include <iostream> #include <cstdio> using namespace s
阅读全文
摘要:输入一个长度为 n 的整数序列。 每个询问输入一对 {s,e};对于每个询问,输出原序列中从第 s个数到第 e个数的和。 #include <iostream> #include <cstdio> using namespace std; const int N = 100010; int n, m
阅读全文
摘要:给定两个非负整数,请你计算 它们 的商和余数。 #include <iostream> #include <vector> #include <algorithm> using namespace std; vector<int> a, c; int b; int div () { int t =
阅读全文
摘要:给定两个非负整数,请你计算它们的值。 #include <iostream> #include <vector> using namespace std; vector<int> a, b, c; void mul () { int m = a.size(), n = b.size(); c = v
阅读全文