CodeForces 616D Longest k-Good Segment
2016-04-17 11:17
495 查看
题意:给你n个数,你需要找到一个最长的区间,使得这个区间里面不同的数小于等于k个
思路:直接扫一遍就好了
Description
The array a with n integers is given. Let's call the sequence of one or more consecutive elements in asegment.
Also let's call the segmentk-good if it contains no more than k different values.
Find any longest k-good segment.
As the input/output can reach huge size it is recommended to use fast input/output methods: for example, prefer to use scanf/printfinstead of cin/cout in C++, prefer to use BufferedReader/PrintWriter instead
of Scanner/System.out in Java.
Input
The first line contains two integers n, k (1 ≤ k ≤ n ≤ 5·105) — the number
of elements in a and the parameter k.
The second line contains n integers ai (0 ≤ ai ≤ 106)
— the elements of the array a.
Output
Print two integers l, r (1 ≤ l ≤ r ≤ n) — the index of the left and the index of the right ends of
some k-good longest segment. If there are several longest segments you can print any of them. The elements in a are numbered from 1 to n from
left to right.
Sample Input
Input
Output
Input
Output
Input
Output
思路:直接扫一遍就好了
#include<bits/stdc++.h> using namespace std; const int maxn = 1000005; int a[maxn]; int vis[maxn]; int main() { int n,k; scanf("%d%d",&n,&k); for (int i = 1;i<=n;i++) scanf("%d",&a[i]); int l=0,r=0,ans=0,now=0; int ll = 1; for (int i = 1;i<=n;i++) { vis[a[i]]++; if (vis[a[i]]==1) now++; while (now>k) { vis[a[ll]]--; if (vis[a[ll]]==0) now--; ll++; } if (i-ll+1>=r-l+1) r=i,l=ll; } printf("%d %d\n",l,r); }
Description
The array a with n integers is given. Let's call the sequence of one or more consecutive elements in asegment.
Also let's call the segmentk-good if it contains no more than k different values.
Find any longest k-good segment.
As the input/output can reach huge size it is recommended to use fast input/output methods: for example, prefer to use scanf/printfinstead of cin/cout in C++, prefer to use BufferedReader/PrintWriter instead
of Scanner/System.out in Java.
Input
The first line contains two integers n, k (1 ≤ k ≤ n ≤ 5·105) — the number
of elements in a and the parameter k.
The second line contains n integers ai (0 ≤ ai ≤ 106)
— the elements of the array a.
Output
Print two integers l, r (1 ≤ l ≤ r ≤ n) — the index of the left and the index of the right ends of
some k-good longest segment. If there are several longest segments you can print any of them. The elements in a are numbered from 1 to n from
left to right.
Sample Input
Input
5 5 1 2 3 4 5
Output
1 5
Input
9 3 6 5 1 2 3 2 1 4 5
Output
3 7
Input
3 1 1 2 3
Output
1 1
相关文章推荐
- HDU 1056 HangOver(数学题)
- 给人类支三招对付AlphaGo
- google play aso
- google big table
- google file system
- 使用go构建命令行程序的快捷之道
- go 安装
- Django:之ORM、CMS和二维码生成
- SAE部署django应用
- leetcode 169. Majority Element 多数投票算法(Boyer-Moore Majority Vote algorithm)
- Visible.GONE
- [Google Codejam] Round 1A 2016 - Rank and File
- [Google Codejam] Round 1A 2016 - The Last Word
- golang windows环境下的配置安装
- 【笔记】A Review on Multi-Label Learning Algorithms
- mongo入门--基本参数配置
- 研究Golang
- 算法导论习题:10.2-7 in Go语言
- UVa 11292 Dragon of Loowater
- Google自己的下拉刷新组件SwipeRefreshLayout