热身训练2 The All-purpose Zero
简要题意:
长度为n的数组,每个数字为S[i],$0$是一种很神奇的数字,你想要的,它都可以变!
问这个序列的最长上升子序列长度为多少?
分析:
我们将除了‘0’以外的S[i],减去i之前出现的‘0’的个数,最后求得排除‘0’后的最长上升子序列长度,加上‘0’的个数,就是我们要求的答案。
在这里我不主要分析该做法的正确性,我们引入一个O(nlogn)的方法来求最长上升子序列。
LIS (点此看题)
贪心+二分
我们令f[i]表示长度为i的上升子序列,末尾的最小值。
这里我们因为贪心,所以子序列末尾越小越好。
我们按顺序枚举给出的数组S[i],然后对f[]二分查找除小于S[i]的最大的f[j],并用它将f[j+1]更新。
- #include<bits/stdc++.h>
- using namespace std;
- #define re register int
- #define LL long long
- const int N=1e5+5;
- int n, a[N], b[N], len;
- signed main()
- {
- scanf("%d",&n);
- for(re i=1;i<=n;++i) scanf("%d",&a[i]);
- for(re i=1;i<=n;++i)
- {
- if(a[i] > b[len]) b[++len] = a[i];
- else
- {
- int tp = lower_bound(b+1, b+1+len, a[i])-b;
- b[tp] = a[i];
- }
- }
- printf("%d", len);
- }
上马


- #include<bits/stdc++.h>
- using namespace std;
- #define re register int
- #define LL long long
- const int N=1e5+5;
- int n, a[N], b[N], num, len;
- inline void work()
- {
- num = len = 0;
- scanf("%d",&n);
- for(re i=1;i<=n;++i)
- {
- scanf("%d",&a[i]);
- if(a[i] == 0)
- {
- num ++;
- a[i] = 1e9;
- }
- else
- {
- a[i] -= num;
- }
- }
- b[0] = -1e9;
- for(re i=1;i<=n;++i)
- {
- if(a[i] == 1e9) continue;
- if(a[i] > b[len]) b[++len] = a[i];
- else
- {
- int tp = lower_bound(b+1, b+1+len, a[i])-b;
- b[tp] = a[i];
- }
- }
- printf("%d\n", len+num);
- }
- signed main()
- {
- int T;
- scanf("%d",&T);
- for(re i=1;i<=T;++i)
- {
- printf("Case #%d: ",i);
- work();
- }
- return 0;
- }
热身训练2 The All-purpose Zero的更多相关文章
- 数位dp & 热身训练7
数位dp 数位dp是一种计数用的dp,一般就是要统计一段区间$[L,R]$内,满足一定条件的数的个数,或者各个数位的个数. 数位dp使得暴力枚举变为满足一定状态的记忆化,更加优秀. 数位dp常常会考虑 ...
- 热身训练4 Article
Article 在这个学期即将结束时,DRD开始写他的最后一篇文章. DRD使用著名的Macrohard的软件World来写他的文章. 不幸的是,这个软件相当不稳定,它总是崩溃. DRD需要在他的文章 ...
- 热身训练4 Eighty seven
Eighty seven 简要题意: n个卡片,其中第i个卡片的数值为$a[i]$.一共q次询问,每次询问将删去其中3个卡片(可能删除若干相同的卡片)后,问能否选出10个卡片,数值之和等于87. n≤ ...
- 热身训练3 Palindrome
Palindrome 简要题意: 我们有一个字符串S,字符串的长度不超过500000. 求满足S[i]=S[2n−i]=S[2n+i−2](1≤i≤n)(n≥2)的子串个数. 分析: 我们能通过简 ...
- 热身训练2 GCD
题目描述 简要题意: n个数字,a1,a2,...,an m次询问(l,r),每次询问需回答 1.gcd(al,al+1,al+2,...,ar);2.gcd(ax,ax+1,ax+2,...,ay ...
- 热身训练2 Another Meaning
题目来源 简要题意: 众所周知,在许多情况下,一个词语有两种意思.比如"hehe",不仅意味着"hehe",还意味着"excuse me". ...
- 热身训练1 Calculator
题目出处:Calculator 简要题意: 你有一个确定的函数,f(x)=+...*...^...,其中共有n个操作,从左到右依次计算. 共有m次询问,我们每次询问,1.会修改f(x)中的操作:2.输 ...
- 热身训练1 ping ping ping
点此进入 题意: 一棵树,n+1 个节点,以0号节点为根,给出端点(a,b),节点a到节点b的路径上,至少有一个点是"坏掉的",求"坏掉的点"最少 分析: St ...
- 热身训练1 Problem B. Harvest of Apples
http://acm.hdu.edu.cn/showproblem.php?pid=6333 题意: 求 C(0,n)+C(1,n)+...+C(m,n) 分析: 这道题,我们令s(m,n) = C( ...
随机推荐
- 六种多线程方法解决UI线程堵塞
http://blog.csdn.net/oyi319/article/details/6851371 一.六种多线程方法 .NET Framework2.0框架提供了至少4种方式实现多线程,它们是& ...
- 安装docker遇到:package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
执行 yum install docker-ce docker-ce-cli containerd.io 提示: 错误: 问题: package docker-ce-3:19.03.8-3.el7.x ...
- [源码解析] PyTorch 流水线并行实现 (1)--基础知识
[源码解析] PyTorch 流水线并行实现 (1)--基础知识 目录 [源码解析] PyTorch 流水线并行实现 (1)--基础知识 0x00 摘要 0x01 历史 1.1 GPipe 1.2 t ...
- 了解PHP-FPM
在服务器上,当我们查看php进程时,全都是php-fpm进程,大家都知道这个就是php的运行环境,那么,它到底是个什么东西呢? PHP-FPM简介 PHP-FPM,就是PHP的FastCGI管理器,用 ...
- css3 flex的IE8浏览器兼容问题
我这是进行判断浏览器 css判断ie版本才引用样式或css文件 <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> &l ...
- css颜色字符串转换, 字符串转化为驼峰形式
* 将 rgb 颜色字符串转换为十六进制的形式,如 rgb(255, 255, 255) 转为 #ffffff1. rgb 中每个 , 后面的空格数量不固定2. 十六进制表达式使用六位小写字母3. 如 ...
- 深入剖析 Laravel 服务容器
https://cloud.tencent.com/developer/article/1340400
- LR虚拟用户已设置集合点,但controller无法设置集合点策略的解决方案
原文来自:https://blog.csdn.net/qq_34982914/article/details/90905030 学习loadrunner的过程中,肯定涉及集合点的添加,但是我们按照书上 ...
- P2150-[NOI2015]寿司晚宴【dp】
正题 题目链接:https://www.luogu.com.cn/problem/P2150 题目大意 将\(2\sim n\)选出一些分成两个集合,要求这两个集合中没有一对数不是互质的.求方案数对\ ...
- 你需要知道的MySQL&InnoDB锁都在这里
目录 一.前言 二.锁的类型 2.1 全局锁 2.2 表级锁 2.2.1 表锁 2.2.2 元数据锁(Meta Data Locks) 2.2.3 自增列锁(AUTO-INC Locks) 2.2.4 ...