12 2019 档案
摘要:单调栈: 用于解决求出距离当前值最近的满足某个性质的值 1 给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。 2 3 输入格式 4 第一行包含整数N,表示数列长度。 5 6 第二行包含N个整数,表示整数数列。 7 8 输出格式 9 共一行,包含N个整数,其中第i个数
阅读全文
摘要:区间合并: 直接看题: 给定 nn 个区间 [li,ri][li,ri],要求合并所有有交集的区间。 注意如果在端点处相交,也算有交集。 输出合并完成后的区间个数。 例如:[1,3]和[2,6]可以合并为一个区间[1,6]。 输入格式 第一行包含整数n。 接下来n行,每行包含两个整数 l 和 r。
阅读全文
摘要:离散化: 如果数据范围很大,但是分布稀疏,可以考虑离散化做题,就是将在一个大范围里面把所有用到的数据映射到一个小范围里面比如下面的这个题 eg 求区间和: 假定有一个无限长的数轴,数轴上每个坐标上的数都是0。 现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。 近下来,进行 m 次询问
阅读全文
摘要:位运算 常用操作: 1:(x >> k)& 1 取出第x第k位数字 2: lowbit(x),求出x的二进制中最右边1表示的数,例如 10 :1010 ,最右边1表示10代表数字2 1 #include <iostream> 2 3 using namespace std; 4 5 int n; 6
阅读全文
摘要:双指针算法: 一般分为两种: 第一种:两个指针在同一个序列,一般维护一个区间满足某种性质,比如下面的最长上升子序列那个算法 1 #include <iostream> 2 #include <vector> 3 #include <unordered_map> 4 5 using namespace
阅读全文
摘要:差分就是数组 a 构造一个查分数组 b (一般选择值为0的两个数组),差分数组 b 的相应位置的前缀和代表了数组 a 中每个位置的结果,对于在一个区间里增加或者减小某个数,对于前缀和来说是o1的,所以对于a中某个区间进行同样的操作也是o1,对a矩阵的操作等价于对b矩阵的操作 一维: 如果想要在数组a
阅读全文
摘要:一维: 1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 vector<int> arr(1e6+10,0); 7 vector<long long> sum(1e6+10,0); 8 9 int main(
阅读全文
摘要:add: 1 #include <iostream> 2 #include <vector> 3 #include <string> 4 #include <algorithm> 5 6 using namespace std; 7 8 vector<int> a, b, c;//c = a + b
阅读全文
摘要:1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 5 using namespace std; 6 7 void quicksort(vector<int>& a,int l,int r){ 8 //递归出口 9 i
阅读全文
摘要:删除链表中的节点:1.通过找前一个节点 2.通过找后一个节点然后把当前节点伪装成后一个 void deleteNode(ListNode* node) { node->val = node->next->val; node->next = node->next->next; } 数组模拟单链表: 1
阅读全文
摘要:版本1 当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。 C++ 代码模板: 1 int bsearch_1(int l, int r) 2 { 3 while (l < r) 4 { 5 i
阅读全文