zoukankan      html  css  js  c++  java
  • luogu P1020 导弹拦截

    题目链接:luogu P1020 导弹拦截

    题目大意:

    题解:
    寻找一个最长上升序列和一个最长不上升序列,通过二分的方法寻找替换的位置。

    #include <algorithm>
    #include <iostream>
    using namespace std;
    #define N 100010
    
    int a[N], f1[N], f2[N], n;
    
    int main() {
        while (cin >> a[++n]);
        n--;
        int len1 = 1, len2 = 1;
        f1[1] = a[1];
        f2[1] = a[1];
        for (int i = 2; i <= n; ++i) {
            if (f1[len1] >= a[i]) {
                f1[++len1] = a[i];
            } else {
                int p1 = upper_bound(f1 + 1, f1 + 1 + len1, a[i], greater<int>()) - f1;
                f1[p1] = a[i];
            }
            if (f2[len2] < a[i]) {
                f2[++len2] = a[i];
            } else {
                int p2 = lower_bound(f2 + 1, f2 + 1 + len2, a[i]) - f2;
                f2[p2] = a[i];
            }
        }
        cout << len1 << endl << len2;
        return 0;
    }
    
  • 相关阅读:
    SVN 撤回(回滚)提交的代码
    Android随笔
    Android随笔
    Android随笔
    Android随笔
    阅读笔记
    Android随笔
    Android随笔
    Android随笔
    Android随笔
  • 原文地址:https://www.cnblogs.com/IzumiSagiri/p/14020286.html
Copyright © 2011-2022 走看看