CodeForces
来源:互联网 发布:微信看不到淘宝链接 编辑:程序博客网 时间:2024/05/18 01:14
题意:
给定长度为n的序列,找一个最长的区间,使得其中不同的数字的个数不大于K
思路:
尺取
#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<cmath>#include<set>#include<queue>#include<stack>#include<map>#define PI acos(-1.0)#define in freopen("in.txt", "r", stdin)#define out freopen("out.txt", "w", stdout)#define kuaidian ios::sync_with_stdio(0);using namespace std;typedef long long ll;typedef unsigned long long ull;const int maxn = 1e6 + 7, maxd = 1e8;const ll mod = 1e9 + 7;const int INF = 0x7f7f7f7f;int n, k;int a[maxn], cnt[maxn] = {0};int main() { scanf("%d %d", &n, &k); for(int i = 1; i <= n; ++i) { scanf("%d", &a[i]); } int l_ = 1, r_ = 1, t = 1, ans = k, id = 1; cnt[a[1]]++; while(1) { if(r_ < n && t <= k) { r_++; if(cnt[a[r_]] == 0) t++; cnt[a[r_]]++; if(t <= k) { if(ans < (r_-l_+1)) { ans = (r_-l_+1); id = l_; } } } else if(t > k) { cnt[a[l_]]--; if(cnt[a[l_]] == 0) t--; l_++; if(ans < (r_-l_+1)) { ans = (r_-l_+1); id = l_; } } else break; } printf("%d %d", id, id+ans-1); return 0;}
阅读全文
1 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Unity中修改相机各个Layer的照射视距
- 算法导论:c++快速排序
- Scala语言入门之环境配置
- 自定义圆角
- fabric.js图片圆角方法(测试)
- CodeForces
- Hibernate的学习之路十四(事务)
- Spring Cloud学习笔记4——服务容错保护Hystrix
- AI GOD:1013: 小英的咖啡厅
- window下面使用protobuf
- Haskell语言学习笔记(45)Profunctor
- NBUT 1619
- C语言指针详述
- Haskell语言学习笔记(46)Parsec(3)