• chcod炸弹


    【题目描述】

    话说Cpp国和Pas国发生了战争, Pas国派出了强大的飞机战队, Cpp国于是使出了炸弹CHCOD 来反击Pas国的飞机舰队。然而CHCOD的发射器,只能逐渐往上打。所以Cpp国现在只能打 掉一部分的Pas国飞机。现在给出每舰队一个Pas国飞机飞行高度,求Cpp国最多打掉Pas 国飞机数(如果高度< 0,则是钻地机,CHCOD炸弹打不到) 

    【输入格式】

    第一行:n Pas国发出的飞机舰队飞机数量 第二行:n个数,Pas国飞机飞行高度。

    【输出格式】

    一个数:Cpp国最多打掉Pas国飞机数。

    【分析】

    简单的最长上升子序列,一般的做法O(n^2),这里明显会超时,所以我们就用一个O(n log n)的算法。

    我们先设置一个stack栈,存储我们的序列,然后我们维护这个stack,每次用二分找出比top大的最小的数,然后替换就可以了。

    【代码】

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int n,top;
     6 int a[100010],st[100010];
     7 
     8 int main()
     9 {
    10     scanf("%d",&n);
    11     int cnt=0;
    12     for(int i=1;i<=n;i++){
    13         int x;
    14         scanf("%d",&x);
    15         if(x>=0)a[++cnt]=x;
    16     }
    17     top=0; n=cnt;
    18     for(int i=1;i<=n;i++){
    19         if(a[i]>st[top])st[++top]=a[i];
    20         else{
    21             int l=1,r=top;
    22             while(l<r){
    23                 int mid=(l+r)>>1;
    24                 if(st[mid]>a[i])r=mid;
    25                 else l=mid+1;
    26             }
    27             st[l]=a[i];
    28         }
    29     }
    30     printf("%d
    ",top);
    31     return 0;
    32 }
    黎明的朝阳,会为苦难中最坚强的信念升起
  • 相关阅读:
    解决winXP无法远程桌面连到win8
    Exception处理
    Java父类与子类的内存引用讲解
    JAVA子类继承父类
    JAVA子类调用父类构造方法
    JS 矩阵转置
    JS 二分查找
    JS冒泡排序
    JS 求平均值
    关于STM32 NVIC配置的解释
  • 原文地址:https://www.cnblogs.com/Dawn-Star/p/9129623.html
Copyright © 2020-2023  润新知