acwing 1012 友好城市 (最长上升子序列)

题面

在这里插入图片描述

题解

在这里插入图片描述

单调队列二分优化 O(nlogn)

代码

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>


using namespace std;
typedef pair<int, int> PII;
const int N = 5010;

int n;
PII arr[N];
int f[N];

int main() {
    
    

    cin >> n;
    for (int i = 1; i <= n; i++) cin >> arr[i].first >> arr[i].second;
    sort(arr + 1, arr + n + 1);

    int len = 0;
    for (int i = 1; i <= n; i++) {
    
    
        int l = 0, r = len;
        while (l < r) {
    
    
            int mid = (l + r + 1) >> 1;
            if (f[mid] < arr[i].second) l = mid;
            else r = mid - 1;
        }
        len = max(len, r + 1);
        f[r + 1] = arr[i].second;
    }
    cout << len << endl;

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_44791484/article/details/115176046