zoukankan      html  css  js  c++  java
  • 洛谷P1020导弹拦截-题解

    原题:

    思路:

    经典DP题目

    但这个题有个更快的做法

    开一个数组d表示序列中的数

    如果目前这个数与d中最后一位符合要求

    就加入

    如果不符合就找到d中第一个不符合要求的并替换

    相当于一直在确定这个序列是多少

    详见代码

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int a[100005];
    int cnt;
    int d1[100005],d2[100005];
    int main()
    {
        while(cin>>a[++cnt]);
        cnt--;
        int len1=1;
        int len2=1;
        d1[1]=a[1];
        d2[1]=a[1];
        for(int i=2;i<=cnt;i++)
        {
            if(d1[len1]>=a[i])
                d1[++len1]=a[i];
            else
            {
                int p1=upper_bound(d1+1,d1+1+len1,a[i],greater<int>())-d1;
                d1[p1]=a[i];
            }
            if(d2[len2]<a[i])
                d2[++len2]=a[i];
            else
            {
                int p2=lower_bound(d2+1,d2+1+len2,a[i])-d2;
                d2[p2]=a[i];
            }
        }
        printf("%d
    %d
    ",len1,len2);
        return 0;
    }
    

      

  • 相关阅读:
    希望jQuery操作DOM文档,则必须确保DOM载入后开始执行
    Web全栈AngularJS
    Web全栈AngularJS
    Web全栈AngularJS
    KD-Tree
    KD-Tree
    KD-Tree
    KD-Tree
    如何提升自身实力
    如何提升自身实力
  • 原文地址:https://www.cnblogs.com/lujin49/p/13513390.html
Copyright © 2011-2022 走看看