11 2023 档案

摘要:如何求n的二进制表示中第k位是几? 1.先把第k位移到最后一位:n >> k 2.看个位是几:x & 1 综合得到:n >> k & 1返回的是n的二进制表示中第k位 题目链接: https://www.acwing.com/problem/content/803/ 题解: 用到lowbit(x) 阅读全文
posted @ 2023-11-30 23:24 ykycode 阅读(11) 评论(0) 推荐(0) 编辑
摘要:双指针算法分为两类:第一类指向一个序列(更多的情况),第二类指向两个序列。 基本的代码框架是: for (i = 0, j = 0; i < n; i++) { while (j < i && check(i, j)) j++; // 每道题目的具体逻辑 } 核心思想:运用单调性等性质,将O(n2) 阅读全文
posted @ 2023-11-30 22:31 ykycode 阅读(45) 评论(0) 推荐(0) 编辑
摘要:差分是前缀和的逆运算 一维差分 对于a1,a2,…,an,构造b1,b2,…,bn,使得ai = b1 + b2 + … + bi。此时,b数组成为a数组的差分,a数组称为b数组的前缀和。 题目链接: https://www.acwing.com/problem/content/799/ 代码模版: 阅读全文
posted @ 2023-11-27 23:33 ykycode 阅读(29) 评论(0) 推荐(0) 编辑
摘要:前缀和算法总结(例题:激光炸弹)前缀和思维导图: 一维前缀和算法模版: #include <iostream> using namespace std; const int N = 100010; int n, m; int s[N]; int main() { scanf("%d%d", &n, &m); for (int i 阅读全文
posted @ 2023-11-27 19:33 ykycode 阅读(15) 评论(0) 推荐(0) 编辑
摘要:高精度加法 题目链接: https://www.acwing.com/problem/content/793/ 代码模版: #include <iostream> #include <vector> using namespace std; // C = A + B vector<int> add( 阅读全文
posted @ 2023-11-26 13:49 ykycode 阅读(9) 评论(0) 推荐(0) 编辑
摘要:整数二分 二分的本质并不是单调性,而是从一半满足一半不满足的区间中找到边界点。 模板题: 数的范围 给定一个按照升序排列的长度为n的整数数组,以及q个查询。 对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。 如果数组中不存在该元素,则返回 -1 -1。 输入格式 第一行包含整数 阅读全文
posted @ 2023-11-22 22:44 ykycode 阅读(40) 评论(0) 推荐(0) 编辑
摘要:归并排序算法总结(例题:逆序对的数量)归并排序思维导图: 知识点:如果原序列中两个数的值是相同的,它们在排完序后,它们的位置不发生变化,那么这个排序是稳定的。快速排序是不稳定的,归并排序是稳定的。 快排变成稳定的=>使快排排序数组中的每个数都不同,将ai变成<ai, i>这个二元组,将ai的下标也放进来,使用双关键字排序。 快速排序平均 阅读全文
posted @ 2023-11-20 23:35 ykycode 阅读(15) 评论(0) 推荐(0) 编辑
摘要:快速排序算法总结(例题:第k个数)快速排序思维导图: 快速排序算法模版: #include <iostream> using namespace std; const int N = 1e5 + 10; int n; int q[N]; void quick_sort(int q[], int l, int r) { if (l > 阅读全文
posted @ 2023-11-19 23:48 ykycode 阅读(18) 评论(0) 推荐(0) 编辑