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. vs2019 16.8更新之后的 C++20 协程co_yield用法

    由于搜索出来的帖子,都是老版本的实验协程,很多老的代码已经失去参考性,并且很复杂,所以就自己研究了一下. 1 #include <iostream> 2 #include <coro ...

  2. lua table与json的之间的互相转换高性能c++实现

    请自行约束两种语言数据结构语法上的不同,避开如下问题: 1.json本身不约束key是否符合一个编程语言中的变量名,所以编写用于和编程语言数据结构交互的json代码时应该注意key是否正确. 2.lu ...

  3. Identity Server 4 从入门到落地(四)—— 创建Web Api

    前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...

  4. SpringBoot整合Shiro 一:搭建环境

    Java项目的安全框架一般使用 shiro 与 spring security 具体怎么选择可以参考文章:安全框架 Shiro 和 Spring Security 如何选择 我这里选择使用Shiro ...

  5. A Child's History of England.24

    Besides all these troubles, William the Conqueror was troubled by quarrels among his sons. He had th ...

  6. 关于java中的安全管理器

    最近再查看java的源码的时候看见了这一类代码 final SecurityManager sm = System.getSecurityManager(); 想要了解这个是为了做什么,查看资料之后发 ...

  7. Java读文件写入kafka

    目录 Java读文件写入kafka 文件格式 pom依赖 java代码 Java读文件写入kafka 文件格式 840271 103208 0 0.0 insert 84e66588-8875-441 ...

  8. C++构造函数和析构函数初步认识(2)

    构造函数的三个作用1.构造对象2.对象初始化3.类型转换  //Test1.h #include<iostream> using namespace std; //构造对象 //初始化对象 ...

  9. mystar01 nodejs MVC 公共CSS,JS设置

    mystar01 nodejs MVC gulp 项目搭建 config/express.js中定义别名 //将下载的第三方库添加到静态资源路径当中,方便访问 app.use('/jquery', e ...

  10. vmware使用nat连接配置

    一.首先查看自己的虚拟机服务有没有开启,选择电脑里面的服务查看: 1.计算机点击右键选择管理  2.进入管理选择VM开头的服务如果没有开启的话就右键开启  二.虚拟机服务开启后就查看本地网络虚拟机的网 ...