哪位大佬教教本蒟蒻如何把时间复杂度压到O(nlogn)

P1439 【模板】最长公共子序列

王琼老师 @ 2023-08-27 14:21:39

#include <iostream>
#include <vector> 
#include <algorithm> 
using namespace std;

void Output(vector<int> &a)
{
    for(int i=0; i<a.size(); i++)
        cout<<a[i]<<" ";
    cout<<endl;
}

int GetLis(vector<int> &a)
{
    vector<int> len(a.size(), 1);
    for(int i=1; i<a.size(); i++)
        for(int j=0; j<i; j++)
        {
            if(a[j]<a[i])
                continue;
            if(len[j]+1>len[i])
                len[i]=len[j]+1;
        }
//  Output(len);
    vector<int>::iterator it=max_element(len.begin(), len.end());
    return *it;
}

int main()
{
//  freopen("1.txt", "r", stdin);
    int n;  cin>>n;
    vector<int> a(n);
    for(int i=0; i<n; i++)
        cin>>a[i];
    cout<<GetLis(a)<<endl;
    return 0;
} 

by 2020kanade @ 2023-08-27 14:23:36

@王琼老师 把某一个序列按照下标与值的关系哈希一下,映射到另一个序列上,然后做LIS。


by huhexuan @ 2023-10-15 12:30:19

用二分去查。


|