01 2023 档案

摘要:概念 将一个较大的区间映射到一个小的区间中,因为这个较大的区间是离散的,如果开辟一个大小跟这个区间一致的数组会造成浪费,遍历的话会超时,所以我们需要映射 映射: vector<int> alls;//存储所有带离散化的值 sort(alls.begin(), alls.end()); //排序 al 阅读全文
posted @ 2023-01-23 21:43 咕噜噜冒泡 阅读(24) 评论(0) 推荐(0)
摘要:1.求二进制中第k位数 这里的第k位指的是从低位开始 n>>k&1 2.返回二进制的最后一位1 代码: int lowbit(int x) //返回x的最后一位1 { return x & -x; } 原理: 补码 = 反码 + 1 计算机存储中x的补码为相反数-x 注意 // 位运算中负数右移在前 阅读全文
posted @ 2023-01-23 20:11 咕噜噜冒泡 阅读(30) 评论(0) 推荐(0)
摘要:1.前缀和 求前缀和的时间复杂度与数据的规模有关,但是用前缀和去求某一区间的和时间复杂度为O(1) 一维: 一般让下标从1开始,可以避免特判 一维前缀和 s[i]=a[1]+a[2]+……+a[i] 求数组[l,r]之间的和 =s[r]-s[l-1] 二维: 二维前缀和s[i][j]=a[i][j] 阅读全文
posted @ 2023-01-20 21:59 咕噜噜冒泡 阅读(36) 评论(0) 推荐(0)
摘要:sacnf与printf在头文件cstdio中,sacnf与printf在数据规模较大时效率高于cin与cout 需要注意的是scanf变量需要取地址 1.格式化输出-保留小数位 printf输出小数时默认保留6位小数位,但有时题目输出要求固定的小数位,printf会进行四舍五入 double a= 阅读全文
posted @ 2023-01-20 19:01 咕噜噜冒泡 阅读(52) 评论(0) 推荐(0)
摘要:当计算位数超过最大存储范围时,无法正常存储而使用数组来存储数据 读取 string a, b; cin >> a >> b; //用字符串读取 vector<int>A, B; //转换为存储在数组中 for (int i = a.size() - 1; i >= 0; i--) A.push_ba 阅读全文
posted @ 2023-01-20 18:57 咕噜噜冒泡 阅读(43) 评论(0) 推荐(0)
摘要:1.整数二分 用一个性质将区间分为满足性质和不满足性质,答案是二分的边界 情况一 代码分析 int bsearch_1(int l,int r) { while (l < r) { int mid = l + r >> 1; if (check(mid)) r = mid; //如果mid满足性质缩 阅读全文
posted @ 2023-01-19 20:21 咕噜噜冒泡 阅读(102) 评论(0) 推荐(0)
摘要:1.快速排序 快速排序的思想分治 确定轴值(分界点),可以是q[l]、q[l+r>>1](建议用这个)、q[r] 根据轴值划分 递归左右子划分 快排结束即已经是合并完的情况,所以已经完成子问题合并 代码分析 //快速排序函数 void quick_sort(int a[], int l, int r 阅读全文
posted @ 2023-01-19 13:02 咕噜噜冒泡 阅读(39) 评论(0) 推荐(0)