The All-purpose Zero

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 584    Accepted Submission(s): 278

Problem Description
??
gets an sequence S with n intergers(0 < n <= 100000,0<= S[i]
<= 1000000).?? has a magic so that he can change 0 to any interger(He
does not need to change all 0 to the same interger).?? wants you to
help him to find out the length of the longest increasing (strictly)
subsequence he can get.
 
Input
The first line contains an interger T,denoting the number of the test cases.(T <= 10)
For each case,the first line contains an interger n,which is the length of the array s.
The next line contains n intergers separated by a single space, denote each number in S.
 
Output
For
each test case, output one line containing “Case #x: y”(without
quotes), where x is the test case number(starting from 1) and y is the
length of the longest increasing subsequence he can get.
 
Sample Input
2
7
2 0 2 1 2 0 5
6
1 2 3 3 0 0
 
Sample Output
Case #1: 5
Case #2: 5

Hint

In the first case,you can change the second 0 to 3.So the longest increasing subsequence is 0 1 2 3 5.

 
Author
FZU
思路:0可以变为任何的数,考虑到底以一个数的结尾的最长上升序列,加入前面有0的个数多少来变化能使这个长度变为最长,因为要加入0来变化,所以一定可以改变0的大小来使这个序列递增,但是插入0是有花费的,比如4 0 5;那么这个时候只能让当前的数减去前面0的个数,来抵消这个花费,因为每个0只消耗一点花费,所以将前面所有0加入,可保证到这个
数的序列最长。然后先将非0的求LIS,末尾加个最大值,然后加上前面的0,求最大;
 1 #include <cstdio>
2 #include <cstdlib>
3 #include <cstring>
4 #include <cmath>
5 #include <iostream>
6 #include <algorithm>
7 #include <map>
8 #include <queue>
9 #include <vector>
10 using namespace std;
11 typedef long long LL;
12 int arr[100005];
13 int id[100005];
14 int a[100005];
15 int add[100005];
16 int c[100005];
17 int main(void)
18 {
19 int i,j,k;
20 scanf("%d",&k);
21 int __ca=0;
22 while(k--)
23 {
24 __ca++;
25 int cnt;
26 memset(c,0,sizeof(c));
27 scanf("%d",&cnt);
28 for(i=1; i<=cnt; i++)
29 {
30 scanf("%d",&a[i]);
31 }
32 a[cnt+1]=1e9;
33 cnt++;
34 for(i=1; i<=cnt; i++)
35 {
36 if(a[i]==0)
37 {
38 c[i]=c[i-1]+1;
39 }
40 else
41 {
42 c[i]=c[i-1];
43 }
44 }
45 int ans=1;
46 for(i=1; i<=cnt; i++)
47 {
48 if(a[i]!=0)
49 {
50 arr[ans]=a[i]-c[i];
51 add[ans]=c[i];
52 ans++;
53 }
54 }
55 id[1]=arr[1];
56 int maxx=1;
57 int ac=0; ac=max(ac,add[1]+maxx);
58 for(i=2; i<ans; i++)
59 {
60 if(arr[i]>id[maxx])
61 {
62 maxx++;
63 id[maxx]=arr[i];
64 ac=max(ac,add[i]+maxx);
65 }
66 else
67 {
68 if(arr[i]==id[maxx])
69 continue;
70 else
71 {
72 int ask=0;
73 int l=1;
74 int r=maxx;
75 while(l<=r)
76 {
77 int mid=(l+r)/2;
78 if(id[mid]<=arr[i])
79 {
80 ask=mid;
81 l=mid+1;
82 }
83 else r=mid-1;
84 }
85 ac=max(ac,add[i]+ask+1);
86 maxx=max(maxx,ask+1);
87 id[ask+1]=min(id[ask+1],arr[i]);
88 }
89 }
90 }
91 printf("Case #%d: %d\n",__ca,ac-1);
92 }
93 return 0;
94 }

The All-purpose Zero(hdu5773)的更多相关文章

  1. 《理解 ES6》阅读整理:函数(Functions)(六)Purpose of Functions

    明确函数的双重作用(Clarifying the Dual Purpose of Functions) 在ES5及更早的ES版本中,函数调用时是否使用new会有不同的作用.当使用new时,函数内的th ...

  2. Reading With Purpose: A grand experiment

    Reading With Purpose: A grand experiment This is the preface to a set of notes I'm writing for a sem ...

  3. General Purpose Hash Function Algorithms

    General Purpose Hash Function Algorithms post@: http://www.partow.net/programming/hashfunctions/inde ...

  4. libeXosip2(2) -- General purpose API.

    General purpose API. general purpose API in libeXosip2-4.0.0. More... Modules eXosip2 configuration ...

  5. However, a general purpose protocol or its implementation sometimes does not scale very well.

    https://netty.io/wiki/user-guide-for-4.x.html The Problem Nowadays we use general purpose applicatio ...

  6. Purpose of ContextLoaderListener in Spring

    The ApplicationContext is where your Spring beans live. The purpose of the ContextLoaderListener is ...

  7. iOS 后台定位审核被拒How to clarify the purpose of its use in the locatio

    4.5 - Apps using background location services must provide a reason that clarifies the purpose of th ...

  8. Purpose of XMLString::transcode

    原文地址http://stackoverflow.com/questions/9826518/purpose-of-xmlstringtranscode I don't seem to underst ...

  9. Oracle Multitenant Environment (二) Purpose

    Purpose of a Multitenant Environment A multitenant environment enables the central management of mul ...

  10. PatentTips - Safe general purpose virtual machine computing system

    BACKGROUND OF THE INVENTION The present invention relates to virtual machine implementations, and in ...

随机推荐

  1. centos 7的命令变化

    1.service -> systemctl命令 2.ifconfig -> ip 命令 3.netstat -> ss命令 4.route -> ip route命令 5.t ...

  2. 使用Postman轻松实现接口数据关联

    Postman Postman是一款非常流行的HTTP(s)接口测试工具,入门简单,界面美观,功能强大.作为一个测试/开发工程师,这是一款必须要会用的工具.今天以一个实际的案例,来介绍下Postman ...

  3. 为 Rainbond Ingress Controller 设置负载均衡

    Rainbond 作为一款云原生应用管理平台,天生带有引导南北向网络流量的分布式网关 rbd-gateway.rbd-gateway 组件,实际上是好雨科技团队开发的一种 Ingress Contro ...

  4. 一个专业处理字符串的IDEA插件

    字符串处理想必是小伙伴们平时开发时经常碰到的一个 "难题".为什么要打上引号?因为你说他难吧,其实也不是什么特别复杂的事:你说他不难吧,弄起来还真挺麻烦的,像删除其中空行啊.切换大 ...

  5. 商业爬虫学习笔记day1

    day1 一. HTTP 1.介绍: https://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html http://blog.csdn.ne ...

  6. k8s配置中心-configmap,Secret密码

    目录 k8s配置中心-configmap,Secret 创建ConfigMap 使用ConfigMap subPath参数 Secret 官方文档 编写secret清单 使用secret 在 Pod ...

  7. 【原创】Altium生成Gerber时跳出The Film is too small for this PCB的解决办法

    在用altium Designer画板子的时候,要生成gerber文件的时候,会出错,出现这样的提示框:"The Film is too small for this PCB" 原 ...

  8. sql优化的8种方式

    1.设置索引. MySQL索引操作:给表列创建索引: 建表时创建索引: create table t(id int,name varchar(20),index idx_name (name)); 给 ...

  9. 【力扣】两个数组的交集 II

    给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2: 输入:nums1 = [4,9,5], nu ...

  10. 为什么volatile能保证有序性不能保证原子性

    对于内存模型的三大特性:有序性.原子性.可见性. 大家都知道volatile能保证可见性和有序性但是不能保证原子性,但是为什么呢? 一.原子性.有序性.可见性 1.原子性: (1)原子的意思代表着-- ...