CodeForces 6E - Exposition
2015-08-21 22:32
288 查看
题目的意思,给出一个序列,让你求一个最长的序列,序列里面最大与最小数之差不能超过k,然后问有几个这样的数列,打印出每个序列的开始位置与结束位置。
不过这道题我没有想出来,好伤心啊!然后看到别人的答案出现的multiset和vecot,才明白如果用容器来做这道题就很简单了。
不过这道题我没有想出来,好伤心啊!然后看到别人的答案出现的multiset和vecot,才明白如果用容器来做这道题就很简单了。
#include <iostream> #include <cstdio> #include <cmath> #include <cstdlib> #include <iomanip> #include <algorithm> #include <cctype> #include <stack> #include <queue> #include <string> #include <cstring> #include <iomanip> #include <set> #include <vector> #include <cstdio> #include <stack> #include <sstream> #include <cstring> #include <map> using namespace std; const int INF=0x3f3f3f3f; int arr[100005]; multiset<int> set1; vector<pair<int,int> > res; int main() { int n,k; cin>>n>>k; int tmp=1,maxn=0; for(int i=1;i<=n;++i) { cin>>arr[i]; set1.insert(arr[i]); while(*set1.rbegin()-*set1.begin()>k) { set1.erase(set1.find(arr[tmp]));// tmp++; } if(maxn<i-tmp+1)//比较长度 { res.clear(); maxn=i-tmp+1; res.push_back(make_pair(tmp,i)); } else if(maxn==i-tmp+1) { res.push_back(make_pair(tmp,i)); } } printf("%d %d\n",maxn,res.size()); for(int i=0;i<(int)res.size();++i) printf("%d %d\n",res[i].first,res[i].second); return 0; }
相关文章推荐
- Codeforces Round #197 (Div. 2)
- Codeforces Round #198 (Div. 1)
- Codeforces 405E Codeforces Round #238 (Div. 2)E
- Codeforces 407C Codeforces Round #239 (Div. 1)C
- CodeForces 449A - Jzzhu and Chocolate
- CodeForces 449 B. Jzzhu and Cities
- Codeforces Round #265 (Div. 2)
- Codeforces #310 div2 C. Case of Matryoshkas
- 状态压缩DP codeforces 244 Problem C. The Brand New Function 和 codeforces 165 E. Compatible Numbers
- codeforces 16 Problem E fish
- Codeforces round #247 for Div. 2
- Codeforces Round #246 (Div. 2)
- Codeforces #264(div 2)D.Gargari and Permutations
- Codeforces Round #236 (Div. 2)------A,B
- codeforces 257 div2 B
- Codeforces Gym100571A Cursed Query
- Codeforces Gym100342E Minima
- Codeforces Gym100342J Triatrip
- Codeforces Gym100286B Blind Walk (dfs)
- Codeforces Gym100342J Triatrip