给出一个数组,最多可以删除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. 线程操作UI界面的方法

    以前一般都是用BeginInvoke来刷新UI界面,现在采用 SynchronizationContext 来刷新,写起来清楚多了. SynchronizationContext synchroniz ...

  2. Git的基础

    http://backlogtool.com/git-guide/cn/intro/intro2_3.html

  3. VC++ 中CDC与HDC的区别以及二者之间的转换

    MFC类的前缀都是C开头的  H开头的大多数是句柄  这是为了助记,是编程读\写代码的好的习惯.  CDC中所有MFC的DC的基类.常用的CClientDC dc(this);就是CDC的子类(或称派 ...

  4. 删除ubuntu后无法进入windows

    一天,脑袋一热想装个ubuntu学习学习,结果装的ubuntu版本比较老,没有集成我笔记本的网卡驱动,在ubuntu下上不了网,心想上不了网学习起来不是很不方便,于是就直接在win7下将ubuntu的 ...

  5. AS3 转 Java

    不错,我就是as3转java的程序猿. 大概两年前加过as3的QQ群里,有很多群友说as3发展前景不好,很多要转语言.我当时也想转,一直苦于没机会.现在机会终于来了... 首先说明一点,as3并不会像 ...

  6. Math

    Math.sin(t)   // sin(t) Math.power(x,2*i)   // x的2i次方 (double)(Math.round(sum*1000000))/1000000;   / ...

  7. SqlServer传输数据到ORACLE,SSIS

    一.配置32位ODBC 配置tnsname文件,增加ORACLE数据库 打开32位ODBC 二.创建一个PROJECT并配置数据源 1.创建一个project 三.数据传输SSIS,工作流 四.为DT ...

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

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

  9. strcpy(),strcat()的用法

    strcpy(): 定义一个字符串char a[20],和一个字符串c[]="i am a teacher!"; 把c复制到a中就可以这样用:strcpy(a,c); 这个函数包含 ...

  10. python第十九天-----Django进阶

    1.机智的小django为我你们提供了快捷的表单验证! from django.shortcuts import render, HttpResponse,redirect from django i ...