给出一个数组,最多可以删除k个数,问能够获得的最长的一个数字连续段为多少?

把所有相同的数字都提取出来,保存取得每个数字需要删除的数字,然后二分枚举就可以了。

召唤代码君:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define maxn 500200
using namespace std; int a[maxn],b[maxn],first[maxn],next[maxn];
int Q[maxn],top,f[maxn];
bool vis[maxn];
int n,k,N,ans; void go(int cur)
{
vis[cur]=true;
if (next[cur]!=-){
go(next[cur]);
Q[top++]=cur-next[cur]-;
}
else Q[top++]=;
} int main()
{
while (scanf("%d%d",&n,&k)!=EOF){
for (int i=; i<n; i++){
scanf("%d",&a[i]);
b[i]=a[i];
}
sort(b,b+n);
N=unique(b,b+n)-b;
for (int i=; i<n; i++) a[i]=lower_bound(b,b+N,a[i])-b+;
memset(first,-,sizeof(int)*(n+));
for (int i=; i<n; i++) next[i]=first[a[i]],first[a[i]]=i;
memset(vis,false,sizeof(bool)*(n+));
ans=;
for (int i=n-; i>=; i--)
if (!vis[i]){
top=;
go(i);
for (int j=; j<top; j++) Q[j]+=Q[j-];
for (int pos=; pos<top; pos++){
if (Q[top-]-Q[pos]<=k){
ans=max(ans,top-pos);
break;
} int l=pos,r=top-,mid;
while (l<r){
mid=(l+r+)/;
if (Q[mid]-Q[pos]>k) r=mid-;
else l=mid;
}
ans=max(ans,l-pos+);
}
}
printf("%d\n",ans);
}
return ;
}

ZOJ3790_Consecutive Blocks的更多相关文章

  1. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

  2. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  3. 开发该选择Blocks还是Delegates

    前文:网络上找了很多关于delegation和block的使用场景,发现没有很满意的解释,后来无意中在stablekernel找到了这篇文章,文中作者不仅仅是给出了解决方案,更值得我们深思的是作者独特 ...

  4. poj 1390 Blocks

    poj 1390 Blocks 题意 一排带有颜色的砖块,每一个可以消除相同颜色的砖块,,每一次可以到块数k的平方分数.问怎么消能使分数最大.. 题解 此题在徐源盛<对一类动态规划问题的研究&g ...

  5. Java 同步代码块 - Synchronized Blocks

    java锁实现原理: http://blog.csdn.net/endlu/article/details/51249156 The synchronized keyword can be used ...

  6. 区块 Blocks

    Structure / Blocks / Demonstrate block regions

  7. 使用Code::blocks在windows下写网络程序

    使用Code::blocks在windows下写网络程序 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创 ...

  8. Code::Blocks配置GTK+2和GTK+3

    Code::Blocks配置GTK+2和GTK+3 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根 ...

  9. [翻译]理解Ruby中的blocks,Procs和lambda

    原文出处:Understanding Ruby Blocks, Procs and Lambdas blocks,Procs和lambda(在编程领域被称为闭包)是Ruby中很强大的特性,也是最容易引 ...

随机推荐

  1. WCF 编程实验室

    最近由于项目需要,简单研究了一下.NET WCF编程. 首先,简单说下WCF是什么,WCF 本质上,是一种开发框架.它用来开发类似COM+ .WEB SERVICE 这样“远程方法调用” 功能. 普通 ...

  2. 一个Tomcat多端口多项目部署

    为什么突然写这个呢,前两天面试了,被面试官给问住了,回来一查.....怎么这么简单,当时我就....你懂得. 我用的是Tomcat7,用Eclipse新建了两个简单的web项目,贴出web1的截图,w ...

  3. 在android开发中使用multdex的方法-IT蓝豹为你整理

    Android系统在安装应用时,往往需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个,因此在Android开发中,需要使用到MultiDex来解决这个问 ...

  4. Android_SQLite版本升级,降级 管理

    今天我们主要学习了数据库版本升级对软件的管理操作. 我们手机经常会收到xxx软件升级什么的提醒,你的软件版本更新,同时你的数据库对应的版本也要相应的更新. 数据库版本更新需要主要的问题: 软件的1.0 ...

  5. python install_opener用法

    opener:当你获取一个URL时,你使用一个opener(OpenerDirector).正常情况下我们一直使用默认的opener,通过urlopen,但你也可以创建自定义的openers. url ...

  6. struts2的国际化文件在jsp中的引用

    struts.xml中的配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts ...

  7. [转]Direct3D 11 Tessellation Tutorial

    The new hardware tessellation feature available on Direct3D 11 video cards has great potential, but ...

  8. HUST 1017 - Exact cover (Dancing Links 模板题)

    1017 - Exact cover 时间限制:15秒 内存限制:128兆 自定评测 5584 次提交 2975 次通过 题目描述 There is an N*M matrix with only 0 ...

  9. SQL中CONVERT日期不同格式的转换用法

    SQL中CONVERT日期不同格式的转换用法 格式: CONVERT(data_type,expression[,style]) 说明:此样式一般在时间类型(datetime,smalldatetim ...

  10. POJ 1151 Atlantis(线段树-扫描线,矩形面积并)

    题目链接:http://poj.org/problem?id=1151 题目大意:坐标轴上给你n个矩形, 问这n个矩形覆盖的面积 题目思路:矩形面积并. 代码如下: #include<stdio ...