CodeForces 602 B.Approximating a Constant Range(尺取+set)
2017-04-20 09:47
417 查看
Description
给出一个长度为n的序列a[i],保证任意两个相邻的数差值不超过1,问该序列中极差不超过1的最长子段长度
Input
第一行一整数n表示序列长度,之后n个整数a[i]表示该序列(2<=n<=1e5,1<=a[i]<=1e5)
Output
输出极差不超过1的最长子段长度
Sample Input
5
1 2 3 3 2
Sample Output
4
Solution
尺取,用set维护区间最大值和最小值,极差不超过1则更新答案然后区间右端点右移,否则左端点右移,时间复杂度O(nlogn)
Code
给出一个长度为n的序列a[i],保证任意两个相邻的数差值不超过1,问该序列中极差不超过1的最长子段长度
Input
第一行一整数n表示序列长度,之后n个整数a[i]表示该序列(2<=n<=1e5,1<=a[i]<=1e5)
Output
输出极差不超过1的最长子段长度
Sample Input
5
1 2 3 3 2
Sample Output
4
Solution
尺取,用set维护区间最大值和最小值,极差不超过1则更新答案然后区间右端点右移,否则左端点右移,时间复杂度O(nlogn)
Code
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #include<queue> #include<map> #include<set> #include<ctime> using namespace std; typedef long long ll; #define INF 0x3f3f3f3f #define maxn 111111 int n,a[maxn]; multiset<int>s; multiset<int>::iterator it; int main() { while(~scanf("%d",&n)) { s.clear(); for(int i=1;i<=n;i++)scanf("%d",&a[i]); s.insert(a[1]); int l=1,r=2,m,M,ans=1; while(l<=n) { it=s.end(); it--; m=*s.begin(),M=*it; if(M-m>1) { it=s.find(a[l]); s.erase(it),l++; } else { ans=max(ans,r-l); if(r<=n) { s.insert(a[r]),r++; } else break; } } printf("%d\n",ans); } return 0; }
相关文章推荐
- CodeForces 602 B.Approximating a Constant Range(尺取+set)
- Codeforces 602B - Approximating a Constant Range
- 【CodeForces 602B】G - 一般水的题2-Approximating a Constant Range
- 【CodeForces 602C】H - Approximating a Constant Range(dijk)
- CodeForces 602B_Approximating a Constant Range_DP
- Codeforces 602B - Approximating a Constant Range(DP)
- 【32.22%】【codeforces 602B】Approximating a Constant Range
- 602B - Approximating a Constant Range (STL 贪心)
- [CodeForces 602B]Approximating a Constant Range[构造]
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range
- FZU 2016 summer train I. Approximating a Constant Range 单调队列
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range
- CF-Approximating a Constant Range
- CF Round#333 Div2 B. Approximating a Constant Range
- 【Codeforces Round 333 (Div 2)B】【贪心 多指针】Approximating a Constant Range 给定数组 相邻元素波动为1 求差值不超1的最长序连续子序列
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range (dp)
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range st 二分
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range
- Approximating a Constant Range(RMQ)