区间问题
策马奔腾向前冲
这个作者很懒,什么都没留下…
展开
-
求解重叠区间
方法一:对于给定的两个区间(a,b)和(c,d),显然,当且仅当a≤d&&c<=b时才会有重叠区间,此时重叠区间长度L为 L=min(b,d)−max(a,c) 方法二:建立一个区间段数组,例如[a,b),将[a,a+1)...[b-1,b)的区间段加1,[c,d),将[c,c+1)...[b-1,b)的区间段加1,最后统计为2的区间数量即...原创 2019-03-16 15:35:51 · 899 阅读 · 0 评论 -
双指针算法
双指针算法模板for (int i = 0, j = 0; i < n; i ++ ){ while (j < i && check(i, j)) j ++ ; // 具体问题的逻辑}常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作例题...原创 2019-09-04 00:05:16 · 200 阅读 · 0 评论 -
离散化
离散化的步骤:1、去重---数列中可能存在重复元素2、二分查找---算出x离散化的值vector<int> alls; // 存储所有待离散化的值sort(alls.begin(), alls.end()); // 将所有值排序alls.erase(unique(alls.begin(), alls.end()), alls.end()); // 去掉重复元素...原创 2019-09-01 02:15:18 · 183 阅读 · 0 评论 -
ST算法(倍增)
在RMQ问题(区间最值问题)中,著名的ST算法就是倍增的产物。给定一个长度为N的数列A,ST算法能在时间的预处理后,以的时间复杂度在线回答“数列A中下标在 l~r之间的数的最大值是多少”这样的区间最值问题。一个序列的子区间个数显然有个,根据倍增思想,我们首先在这个规模为的状态空间里选择一些2的整数次幂的位置作为代表值。设表示数列A中下标在子区间里的数的最大值,也就是从开始的个数的最大值。递...原创 2019-09-05 20:25:17 · 383 阅读 · 0 评论