第一问就是求最长不上升子序列的长度,要写O(nlogn)的算法。。。。

  对于这种nlogn的算法,只能求出长度,不能求出具体的序列。这种算法实现过程如下:

  我们定义len为到目前为止最长不上升子序列的长度,d[l]表示此长度为l的不上升子序列的末尾数据中最下的那个,a[i]为输入的第i个结果。先使d[1]=1,len=1。我们从i=2(i<=n)开始看:

  如果a[i]<=d[len],那么使d[++len]=a[i],即扩充一下目前的最长不上升子序列;

  否则,a[i]>d[len],就在数组d中从前往后找到第一个<a[i]的元素d[j],此时d[i1,2,...,j-1]都>=a[i],那么它完全可以接上d[j-1]然后生成一个长度为j的不上升子序列,而且这个子序列比当前的d[j]这个子序列更有潜力(因为这个数比d[j]大),所以就替换掉它就行了。

  第二问可由Dilworth定理(大致意思是一个数列分成不上升(或不下降)子序列的最小数=该数列的最长上升(或下降)子序列的长度)知该问是求最长上升子序列的长度。思路与第一问一模一样。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int a[1000000],d[1000000];
void bss();
void ss();
int n;
int main()
{
          char ch=' ';
          while(ch==' ')
          {
                cin>>a[++n];
                ch=getchar();
          }
          bss();
          ss();
          return 0;
}

void bss()                           //求最长不上升子序列
{
         int len=1;
         d[len]=a[1];
         for(int i=2;i<=n;i++)
         {
                 if(a[i]<=d[len])
                 d[++len]=a[i];
                 else
                 {
                         for(int j=1;j<=len;j++)
                         if(d[j]<a[i])
                         {
                                 d[j]=a[i];
                                 break; 
                         } 
                 }
          }
         cout<<len<<endl;
}

void ss()                             //求最长不下降子序列
{
          int len=1;
          d[len]=a[1];
          for(int i=2;i<=n;i++)
          {
                 if(a[i]>d[len])
                 d[++len]=a[i];
                 else
                 {
                          if(a[i]!=d[len])
                          {
                                    for(int j=1;j<=len;j++)
                                    if(d[j]>=a[i])
                                     {
                                              d[j]=a[i];
                                              break; 
                                      } 
                           }
                  }
           }
            cout<<len;
}

导弹拦截 p1020的更多相关文章

  1. 导弹拦截p1020(LIS问题)

    题目描述(题目链接:https://www.luogu.org/problem/P1020) 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够 ...

  2. 【洛谷p1158】导弹拦截

    这道题是个有想法的枚举qwq 导弹拦截[题目链接] 注意:此导弹拦截非彼导弹拦截p1020 导弹拦截 一道题是1999年的,然后我们现在要写的是经过11年韬光养晦之后的导弹拦截 SOLUTION: 要 ...

  3. codevs1044 拦截导弹==洛谷 P1020 导弹拦截

    P1020 导弹拦截 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天 ...

  4. p1020导弹拦截

    传送门 P1020导弹拦截 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度 ...

  5. 洛谷 P1020导弹拦截题解

    洛谷链接:https://www.luogu.org/problem/P1020 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...

  6. luogu P1020 导弹拦截 x

    首先上题目~ luogu P1020 导弹拦截 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都 ...

  7. 【题解】P1020 导弹拦截

    [题解]P1020 导弹拦截 从n^2到nlogn 第二问就是贪心,不多说 第一问: 简化题意:求最长不下降子序列 普通n^2: for (int i = 1; i <= n; i++) for ...

  8. 求最长子序列(非连续)的STL方法 - 洛谷P1020 [NOIP1999 普及组] 导弹拦截

    先给出例题:P1020 [NOIP1999 普及组] 导弹拦截 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 大佬题解:P1020 [NOIP1999 普及组] 导弹拦截 - 洛谷 ...

  9. AC日记——导弹拦截 洛谷 P1020 (dp+模拟)

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

随机推荐

  1. jquery 无缝轮播

    新闻公告无缝轮播--demo 理解:向上移动一个li的高度+margin-bottom值,同时将ul第一个的li插入到ul的最后一个位置. <!DOCTYPE html> <html ...

  2. ORM模板层

    1.模板语言之变量 def index(request): name='lqz' age=18 ll=['name','age'] dic={'name':name,'age':age} class ...

  3. abap异常处理 , update module

    1:异常 https://www.cnblogs.com/rainysblog/p/6665455.html 2:update module https://www.cnblogs.com/cindy ...

  4. Linux命令:lsof

    简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控 ...

  5. k8s 健康检查

    livenessProbe: exec: command: - /bin/sh - '-c' - /opt/app-root/src/check_conf.sh failureThreshold: 3 ...

  6. Apache与Tomcat整合的配置

    下载jk连接器地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/ 把jk连接器即“mod_j ...

  7. 22-Python3 输入和输出

    ''' 输出格式美化 ''' s = 'Hello,Runoob' #repr():将输出读值转化成字符串,产生一个解释器易读读字符 print('repr():',repr(s)) #str():将 ...

  8. mac本的环境基本完成大部分了

    1.禅道的部署,技术上最难搞 session 目录存储目录不存在的处理 终端:open /et 前往——>前往文件夹——〉/资源库/WebServer/Documents/ 在tem目录下新建文 ...

  9. @Value("#{}") 和 @Value("{}")

    1 @Value("#{}")   SpEL表达式 @Value("#{}") 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法.当然还 ...

  10. 查看CPU信息

    基础知识 示例: 开发机器是1个物理CPU,4核8线程,Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 基础 i3:2核模拟4线程,无睿频 i5:4核模拟4线程,有睿频 ...