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

P1020 导弹拦截(nlogn求最长不下降子序列)

题目描述

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

输入导弹依次飞来的高度(雷达给出的高度数据是≤50000 \le 5000050000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

输入输出格式

输入格式:

111行,若干个整数(个数≤100000 \le 100000100000)

输出格式:

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

输入输出样例

输入样例#1: 复制
389 207 155 300 299 170 158 65
输出样例#1: 复制
6
2

求最长不下降子序列需要做的是如果要插入的<=d[l]的数值 则直接插入 如果不是 则在d中找到第一个比他小的然后替换掉 这时候用到了upper_bound(d,d+l,greater<int>)-d;
从而就可以求出来
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<vector>
#include<cmath>
#define Inf 0x3f3f3f3f

const int maxn=1e5+5;
typedef long long ll;
using namespace std;

int a[maxn];
int d[maxn],d2[maxn];
int main()
{
   int len=0;
   int x;
   while(scanf("%d",&x)!=EOF)
   {
         a[len++]=x;
   }
   d[0]=a[0];
   d2[0]=a[0]; 
   int l=0,l2=0;
   for(int t=1;t<len;t++)
   {
         if(a[t]<=d[l])
         {
             d[l+1]=a[t];
           l++;
      }
      else
      {
          int pos=upper_bound(d,d+l,a[t],greater<int>())-d;
          d[pos]=a[t]; 
      }
      if(a[t]>d2[l2])
      {
          d2[l2+1]=a[t];
          l2++;
      }
      else
      {
          int pos=lower_bound(d2,d2+l2,a[t])-d2;
          d2[pos]=a[t]; 
      }
   }
   cout<<l+1<<" "<<l2+1<<endl;
} 

 

转载于:https://www.cnblogs.com/Staceyacm/p/11224600.html

相关文章:

  • P1090 合并果子(哈弗曼树)
  • 推荐阅读链接
  • MySQL 5.7 zip 安装
  • P1004 方格取数(四维动态规划)
  • SCRUM Day 8
  • 2.3_Database Interface ODBC组成原理
  • 石子合并(区间dp典型例题)
  • 石子合并2(环形求最优解 区间dp)
  • 恢复系统管理员密码的五大奇招
  • P1082 同余方程(拓展欧几里德)
  • Mac下eclipse安装SVN插件
  • 程序员真的很懒
  • 【Android应用开发】-(9)应用程序安装卸载原理
  • TCP/IP:网络因此互联
  • 公式输入较好的参考
  • Java反射-动态类加载和重新加载
  • JDK 6和JDK 7中的substring()方法
  • oldjun 检测网站的经验
  • Spring Boot快速入门(一):Hello Spring Boot
  • Swoft 源码剖析 - 代码自动更新机制
  • 初识MongoDB分片
  • 区块链分支循环
  • 收藏好这篇,别再只说“数据劫持”了
  • 说说动画卡顿的解决方案
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #QT(TCP网络编程-服务端)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (bean配置类的注解开发)学习Spring的第十三天
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (MATLAB)第五章-矩阵运算
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (十)T检验-第一部分
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转载)(官方)UE4--图像编程----着色器开发
  • *1 计算机基础和操作系统基础及几大协议
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Core中的去虚
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET程序员迈向卓越的必由之路
  • .net和php怎么连接,php和apache之间如何连接
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET委托:一个关于C#的睡前故事
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • [ linux ] linux 命令英文全称及解释
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [android] 练习PopupWindow实现对话框