当前位置: 首页 > news >正文

P1020 [NOIP1999 普及组] 导弹拦截

题目描述

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。

输入导弹依次飞来的高度,计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

输入格式

一行,若干个整数,中间由空格隔开。

输出格式

两行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

输入输出样例

输入 #1复制

389 207 155 300 299 170 158 65

输出 #1复制

6
2

说明/提示

对于前 50%50% 数据(NOIP 原题数据),满足导弹的个数不超过 104104 个。该部分数据总分共 100100 分。可使用�(�2)O(n2) 做法通过。
对于后 50%50% 的数据,满足导弹的个数不超过 105105 个。该部分数据总分也为 100100 分。请使用 �(�log⁡�)O(nlogn) 做法通过。

对于全部数据,满足导弹的高度为正整数,且不超过 5×1045×104。

此外本题开启 spj,每点两问,按问给分。


upd 2022.8.24upd 2022.8.24:新增加一组 Hack 数据。

题目简化

给定一个数列 �b,问:

  1. 它的最长不上升子序列长度;
  2. 最少能被划分成多少个不上升子序列。
#include<bits/stdc++.h>
using namespace std;
int f[1000005],a[100005],maxn,t,v[1000005],l;
int main() {while(cin>>a[++t]);t--;for(int i=1; i<=t; i++) {f[i]=1;for(int j=l; j>0; j--) {if(a[i]<=a[v[j]]) {f[i]=f[v[j]]+1;break;}}l=max(l,f[i]);v[f[i]]=i;maxn=max(maxn,f[i]);}cout<<maxn<<endl;maxn=0;l=0;for(int i=1; i<=t; i++) {f[i]=1;for(int j=l; j>0; j--) {if(a[i]>a[v[j]]) {f[i]=f[v[j]]+1;break;}}l=max(l,f[i]);v[f[i]]=i;maxn=max(maxn,f[i]);}cout<<maxn;
}

 

http://www.lryc.cn/news/60502.html

相关文章:

  • Makefile学习
  • 2.4 随机变量函数的分布
  • 数据结构【一】:前缀表达式与后缀表达式的区别
  • 搭建 PostgreSQL
  • Nmap入门到高级【第四章】
  • c++正则表达式及其使用,超级详细
  • 【LeetCode: 剑指 Offer II 099. 最小路径之和 | 暴力递归 | DFS =>记忆化搜索=>动态规划】
  • Python OpenCV 计算机视觉:6~7
  • LabView中数组的使用2-1
  • Android 10.0 系统systemui下拉通知栏的通知布局相关源码分析
  • 研读Rust圣经解析——Rust learn-3(变量与可变性,数据类型)
  • 接口的多继承多实现
  • 腾讯-iOS面试题-答案
  • SQL Server内存架构
  • 有哪些功能强大,但是很小众的Python库呢?
  • SpringBoot设计了哪些可拓展的机制?
  • Layer组件多个iframe弹出层打开与关闭及参数传递
  • BearPi环境搭建及基本使用
  • 算法笔记-换根DP
  • LeetCode 785. Is Graph Bipartite【DFS,二分图】中等
  • 【微信小程序】-- 分包 - 独立分包 分包预下载(四十五)
  • 2.3 连续性随机变量
  • 【DES详解】(一)处理input block(64 bits)
  • redis笔记——三种特殊的数据结构
  • 网络安全之编码加密算法
  • mp4视频无法播放的解决方法
  • 搭建Mysql
  • 气传导和骨传导耳机哪个好?简单科普这两种蓝牙耳机
  • 浅尝GoWeb开发之Gin框架
  • 工程行业管理系统-专业的工程管理软件-提供一站式服务