传送门(权限题)
题面:
3048: [Usaco2013 Jan]Cow Lineup

Time Limit: 2 Sec Memory Limit: 128 MB
Submit: 121 Solved: 89
[Submit][Status][Discuss]
Description

Farmer John’s N cows (1 <= N <= 100,000) are lined up in a row. Each cow is identified by an integer “breed ID” in the range 0…1,000,000,000; the breed ID of the ith cow in the lineup is B(i). Multiple cows can share the same breed ID. FJ thinks that his line of cows will look much more impressive if there is a large contiguous block of cows that all have the same breed ID. In order to create such a block, FJ chooses up to K breed IDs and removes from his lineup all the cows having those IDs. Please help FJ figure out the length of the largest consecutive block of cows with the same breed ID that he can create by doing this.

给你一个长度为n(1<=n<=100,000)的自然数数列,其中每一个数都小于等于10亿,现在给你一个k,表示你最多可以删去k类数。数列中相同的数字被称为一类数。设该数列中满足所有的数字相等的连续子序列被叫做完美序列,你的任务就是通过删数使得该数列中的最长完美序列尽量长。
Input

  • Line 1: Two space-separated integers: N and K.
  • Lines 2..1+N: Line i+1 contains the breed ID B(i).

Output

  • Line 1: The largest size of a contiguous block of cows with identical breed IDs that FJ can create.

Sample Input

9 1

2

7

3

7

7

3

7

5

7

INPUT DETAILS: There are 9 cows in the lineup, with breed IDs 2, 7, 3, 7, 7, 3, 7, 5, 7. FJ would like to remove up to 1 breed ID from this lineup.

Sample Output

4

OUTPUT DETAILS: By removing all cows with breed ID 3, the lineup reduces to 2, 7, 7, 7, 7, 5, 7. In this new lineup, there is a contiguous block of 4 cows with the same breed ID (7).

HINT

样例解释:

长度为9的数列,最多只能删去1类数。

不删,最长完美序列长度为2.

删去一类数3,序列变成2 7 7 7 7 5 7,最长完美序列长度为4.因此答案为4


写在前面:诸事不顺
思路:昨天测试题,第一眼觉得是DP,还要用”树“据结构维护一下?感觉复杂度不可能是O(n)O(n),更不可能是O(n2)O(n^2),然后就去先写下面的题目了。测试完晓得先离散化,然后二分答案和队列维护,复杂度也挺科学的,但我发现对于快速得到当前队列中各数出现的次数的最大值是件难事,想着用树状数组和线段树好像都不简单,“难道n^2枚举?时间就爆了啊”,无奈放弃,后来看到有贪心的做法,就是队列中≤k种时就一直放数,等于k+1种时就看看下一个数有没有在队列中出现过,出现过就扔进来,没有就中止当前循环,最后head++。但记录最大值仍然是个问题,总之昨晚一直没有想出来,后来看到Yveh的blog才发现自己煞笔了,因为我们要求的是只是最多删去k种后的最大连续长度,队列中各数出现次数的最大值只是一个辅助,每次ans去和最大值比较就可以变成ans去和可能出现的最大值比较,也就是说当有数的出现次数增加时才有必要去和ans比较,而数的次数减少并不会影响最终的答案
注意:离散化可以用set,也可以排序后重新赋值,都是O(nlogn)O(nlogn),但好像排序的常数小一些?
代码:

#include<bits/stdc++.h>
#include<set>
using namespace std;
int l,r,ans,n,k,tot;
map<int,int>mp;
int flag[100010],a[100010];
int q[100010];
main()
{scanf("%d%d",&n,&k);for (int i=1;i<=n;i++){scanf("%d",&a[i]);if (!mp[a[i]]) mp[a[i]]=++tot;a[i]=mp[a[i]];}l=1;r=0;int kind=0,i=0;while (i<n){while (i<n&&kind<=k){q[++r]=a[++i];if (!flag[a[i]]) kind++;flag[a[i]]++;ans=max(ans,flag[a[i]]);}while (kind==k+1&&i<n){if (!flag[a[i+1]]) break;q[++r]=a[++i];flag[a[i]]++;ans=max(ans,flag[a[i]]);}if (flag[q[l]]==1) kind--;flag[q[l]]--;l++;}printf("%d",ans);
}

Beiyu的二分+树状数组
树状数组维护感觉好厉害,前排膜拜QAQ

【BZOJ3048】Cow lineup,贪心+队列维护(或二分答案)相关推荐

  1. [USACO13JAN] Cow Lineup (单调队列,尺取法)

    题目链接 Solution 尺取法板子,算是复习一波. 题中说最多删除 \(k\) 种,那么其实就是找一个颜色种类最多为 \(k+1\) 的区间; 统计一下其中最多的颜色出现次数. 然后直接尺取法,然 ...

  2. POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)

    $ POJ~2018~Best~Cow~ Fences $(二分答案构造新权值) $ solution: $ 题目大意: 给定正整数数列 $ A $ ,求一个平均数最大的长度不小于 $ L $ 的子段 ...

  3. jzoj3895-数字对【RMQ,GCD,二分答案,单调队列】

    正题 题目大意 一个序列aaa 对于[L..R][L..R][L..R]若ak∈[L..R]∣ai∈[L..R]a_k \in [L..R]|a_i\in[L..R]ak​∈[L..R]∣ai​∈[L ...

  4. bzoj 3377: [Usaco2004 Open]The Cow Lineup 奶牛序列

    3377: [Usaco2004 Open]The Cow Lineup 奶牛序列 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 49  Solve ...

  5. 题解 洛谷 P3069 [USACO13JAN]牛的阵容Cow Lineup

    洛谷P3069[USACO13JAN]牛的阵容CowLineup\color{#00F}{洛谷\ P3069\ [USACO13JAN]牛的阵容Cow Lineup}洛谷 P3069 [USACO13 ...

  6. 洛谷3933 Chtholly Nota Seniorious 二分答案+贪心

    题目链接 题意 给你一个N*M的矩阵 (N,M <=2000)  把他分成两部分 使两部分的极差较大的一个最小  求这个最小值.然后分矩阵的要求是:每个部分内部的方块之间,可以通过上下左右相互到 ...

  7. luoguP1419 寻找段落(二分答案+单调队列)

    题意 给定一个长度为n的序列a1~an,从中选取一段长度在s到t之间的连续一段使其平均值最大.(n<=100000) 题解 二分答案平均值. judge时把每一个a[i]-mid得到b[i] 在 ...

  8. Luogu4022 CTSC2012 熟悉的文章 广义SAM、二分答案、单调队列

    传送门 先将所有模板串扔进广义SAM.发现作文的\(L0\)具有单调性,即\(L0\)更小不会影响答案,所以二分答案. 假设当前二分的值为\(mid\),将当前的作文放到广义SAM上匹配. 设对于第\ ...

  9. P7078-[CSP-S2020]贪吃蛇【贪心,队列】

    正题 题目链接:https://www.luogu.com.cn/problem/P7078 题目大意 有nnn条贪吃蛇,第iii条长度为aia_iai​,每次最长的那条蛇可以选择吃掉最短的那条蛇,然 ...

最新文章

  1. 手机玩游戏大作难在哪?硬件性能要加码,高能效AI同样关键
  2. cocos2d-x CCScrollView和CCTableView的使用(转载)
  3. python数字转对应中文_python中将阿拉伯数字转换成中文的实现代码 | 学步园
  4. HighCharts点击柱形或饼块等加URL或Click事件
  5. 3rd 逻辑运算符的基本用法
  6. jzoj4803-[NOIP2016提高A组模拟9.28]求导【模拟】
  7. The Pilots Brothers' refrigerator
  8. JAVA进阶教学之(Object类的toString方法)
  9. leetcode 110 --- 判断给定的二叉树是否是平衡二叉树
  10. 多媒体计算机技术19秋作业1,东师多媒体计算机技术19春在线作业1【标准答案】.doc...
  11. 小心!智能音箱正在监听你?| 极客头条
  12. PHP合并2个数字键数组的值
  13. java定时任务Quartz整理
  14. Ae:Keylight(1.2)(中英对照)
  15. 360 android root权限获取root,360 N5 root过程详解
  16. 北大计算机python教程_北京大学数据结构与算法(C++版),全套视频教程学习资料通过百度云网盘下载...
  17. 百度网盘免费高速下载(详细过程)
  18. 计算机音乐谱恋人心,天刀曲谱大全_天涯明月刀曲谱恋人心
  19. 五款最佳Linux下载管理器推荐
  20. GRE 词汇2(词根)

热门文章

  1. 设计模式的C语言应用-导言-第一章
  2. typecho 隐藏index.php,Typecho开启伪静态并隐藏index.php
  3. C++学习笔记系列(一)
  4. windows绕开强制更新
  5. Python面向对象编程 __init__方法
  6. jvm垃圾回收机制_JVM的垃圾回收机制总结
  7. python接口测试_python接口测试—get请求
  8. Deepin系统安装后相关设置与环境搭建
  9. html5 crosshair,嘿,纯正ROG血统 CROSSHAIR VIII IMPACT (开箱篇)最终版
  10. 9_python基础—数据序列(公共方法)