尺取法
酷酷的Herio
这个作者很懒,什么都没留下…
展开
-
ihoCoder 1831- 80 Days
HihoCoder 1831- 80 Days ai=ai−bi,ai+=ai−ai−1a_i=a_i-b_i,a_i+=a_i-a_{i-1}ai=ai−bi,ai+=ai−ai−1 显然就是维护长度nnn的区间最小值≥−c\ge -c≥−c 。 区间最小值可RMQ,线段树。 此外本题队列也可做,把能到达加入队尾,否则弹出队首,队列长度到达nnn直接输出答案,因为保证了队列的连续性,所以正确性也是保证的。 显然尺取也是对的。 因此本题有四种方法: RMQ 线段树 队列 尺取 尺取的时空复杂原创 2021-07-31 10:46:04 · 225 阅读 · 0 评论 -
P1712 [NOI2016] 区间(线段树&尺取)
P1712 [NOI2016] 区间(线段树&尺取) 考虑对区间长度排序,然后尺取做,显然当左端点右移时,要满足答案,右端点不可能左移。所以尺取是可行的,接下来是怎么统计一个点出现的次数,显然就是区间修改,单点查询。这不线段树裸题嘛,没了。 code // Problem: P1712 [NOI2016] 区间 // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P1712 // Memory Limit: 250 MB // Tim原创 2021-07-14 20:39:14 · 262 阅读 · 0 评论 -
最长连续不重复子序列的问题
最长连续不重复子序列的问题 应用: 1.求最长连续不重复子序列的长度。 2.求最大连续不重复子序列的和。 方法:双指针法。 用一个数组b[]b[]b[]储存每个数出现的次数,如果数据范围较大或者存在负数,则可以用unordered_mapunordered\_mapunordered_map储存。 代码 1.求长度。 int ans=0; for(int i=1,j=1,l=0;i<=n;i++){ int x=a[i]; b[x]++,l++; while(b[x]>1){原创 2020-12-20 14:23:18 · 473 阅读 · 0 评论 -
2018蓝桥杯省赛第八题:日志统计
2018蓝桥杯省赛第八题:日志统计 思路:二维数组排序然后尺取选即可。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7; #define mst(a,b) memset(a,b,sizeof a) #define lx x<<1 #define rx x<<1|1 #define reg原创 2020-10-15 16:34:29 · 376 阅读 · 0 评论 -
LC.209. 长度最小的子数组
LC.209. 长度最小的子数组 方法1:前缀和+二分。 考虑将其转化为具有单调性的前缀和数组,然后枚举区间左端点进行二分找答案即可。 时间复杂度:O(nlogn)O(nlogn)O(nlogn) class Solution { public: int minSubArrayLen(int s, vector<int>& a) { vector<int>pre(a.size()+1); for(int i=1;i<=a.si原创 2020-06-28 08:52:17 · 532 阅读 · 0 评论 -
D - Xor Sum 2(尺取法)
D - Xor Sum 2(尺取法) 传送门 思路:利用尺取法,枚举每个左端点的贡献,因为区间具有单调性,所以区间右端点不断右移动即可。 时间复杂度:O(2n)O(2n)O(2n) AC代码: #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<string> #include<cmath> using namespace原创 2020-05-14 21:19:12 · 462 阅读 · 0 评论 -
P1102 A-B 数对(二分&尺取)
P1102 A-B 数对(二分&尺取) 思路:二分或者尺取,枚举每个bbb找到对应的等于b+cb+cb+c最大区间。 时间复杂度:O(nlogn)O(nlogn)O(nlogn) AC代码: #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<string> #include<cmath> #include<s原创 2020-05-14 13:22:23 · 360 阅读 · 0 评论 -
P1638 逛画展 (尺取法)
P1638 逛画展 (尺取法) 传送门 思路:显然区间具有单调性,所以可以通过枚举区间左端点,让区间右端点不断增加,至于区间画的种类数,用一个数组记录区间的[l , r]的画的种类数,不断更新即可。 时间复杂度:O(n)O(n)O(n) AC代码: #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<string> #include&l原创 2020-05-14 10:16:25 · 688 阅读 · 0 评论 -
Subsequence(尺取法&二分)
Subsequence(尺取法&二分) 传送门 法1:前缀和+二分思想。预处理前缀和以便于求区间和,然后枚举所有区间左端, 二分查找右端,用STLSTLSTL自带的lower_boundlower\_boundlower_bound即可。 时间复杂度:O(nlogn)O(nlogn)O(nlogn) 法2:尺取法,枚举区间左端点,根据区间单调性,让区间右端点不断增加并更新答案。 时间复杂度:O(n)O(n)O(n) 法1代码: #include<cstdio> #include<i原创 2020-05-14 09:41:33 · 382 阅读 · 0 评论