09 2023 档案
摘要:1、离散化 值域大而数值稀疏的题目,通常先将需要操作的数映射到一个数组中,再做后续操作,可以大大减少时间复杂度。 以AcWing.802为例,是一个典型的前缀和问题,但问题在于,若仅仅使用前缀和算法,时间复杂度会很高,因此需要先做离散化映射。 题目要求如下: 假定有一个无限长的数轴,数轴上每个坐标上
阅读全文
摘要:1、以AcWing.801为例,题目要求如下: 给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。 输入格式第一行包含整数n。 第二行包含n个整数,表示整个数列。 输出格式共一行,包含n个整数,其中的第i个数表示数列中的第i个数的二进制表示中1的个数。 数据范围1≤n≤100000
阅读全文
摘要:1、单队列 例1:将字符串以换行符间隔开 输入一串字符串,字符串有多个由单个逗号隔开的单词,任务是需要把单词间隔开,每个单词换行输出。 输入样例abc def ghi 输出样例abc def ghi #include <iostream> using namespace std; const int
阅读全文
摘要:1、一维差分 首先要知道,差分是前缀和的逆运算, a1 a2 …… an 前缀和b1 b2 …… bn 差分 以AcWing.797为例,题目要求如下: 输入一个长度为 n 的整数序列。 接下来输入 m 个操作,每个操作包含三个整数 l, r, c ,表示将序列中 [l,r] 之间的每个数加上 c
阅读全文
摘要:1、一维前缀和 以AcWing.795为例,题目要求如下: 输入一个长度为N的整数序列。接下来再输入m个询问,每个询问输入一对l, r。对于每个询问,输出原序列中从第l个数到第r个数的和。 输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。接下来m行,每行包含两个整数l和r,表示一
阅读全文
摘要:#if 1 #include <iostream> #include <vector> #include <algorithm> using namespace std; vector<int> add(vector<int> A, vector<int> B) { vector<int> C; i
阅读全文
摘要:1、整数二分 以acwing 789为例,题目要求如下: 第一行输入整数n和q,表示数组长度和询问个数。 第二行输入数组,包含n个整数。 接下来q行,每一行一个整数k,表示一个问询元素。 要求输出q行,每行包含两个整数,表示所求元素的起始位置和终止位置。 如果数组中不存在该元素,则返回 -1 -1。
阅读全文
摘要:1、快速排序 #include <iostream> using namespace std; const int N = 1e5 + 10; int n, q[N]; void qksort(int q[], int l, int r) { if (l >= r) return; int x =
阅读全文