luoguP1439

Posted frankying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luoguP1439相关的知识,希望对你有一定的参考价值。

技术分享图片
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100011
int n,w[N],a[N],f[N];
int main()
{
    memset(f,0x7f,sizeof f);
    f[0] = -1000;
    scanf("%d",&n);
    int tmp;
    for(int i = 1;i <= n;i++){
        scanf("%d",&tmp);
        w[tmp] = i;
    }
    for(int i = 1;i <= n;i++){
        scanf("%d",&tmp);
        a[i] = w[tmp];
    }
    for(int i = 1;i <= n;i++){
        int l = 0,r = i - 1,m,ans;
        while(l <= r){
            m = (l + r) / 2;
            if(f[m] < a[i]){
                ans = m;
                l = m + 1;
            }
            else{
                r = m - 1;
            }
        }
        f[ans + 1] = min(a[i],f[ans + 1]);
    }
    for(int i = n;i >= 1;i--){
        if(f[i] != f[N - 1]){
            return printf("%d",i),0;
        }
    }
    return 0;
}
手打二分
技术分享图片
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100011
int n,w[N],a[N],f[N];
int main()
{
    memset(f,0x7f,sizeof f);
    f[0] = -1000;
    scanf("%d",&n);
    int tmp;
    for(int i = 1;i <= n;i++){
        scanf("%d",&tmp);
        w[tmp] = i;
    }
    for(int i = 1;i <= n;i++){
        scanf("%d",&tmp);
        a[i] = w[tmp];
    }
    for(int i = 1;i <= n;i++){
        int l = 0,r = i - 1,m,ans;
        int* w;
        w = lower_bound(f,f + i,a[i]) - 1;
        ans = w - f;
        f[ans + 1] = min(a[i],f[ans + 1]);
    }
    for(int i = n;i >= 1;i--)
        if(f[i] != f[N - 1])
            return printf("%d",i),0;
    return 0;
}
STL

 

以上是关于luoguP1439的主要内容,如果未能解决你的问题,请参考以下文章

优化算法静电放电优化算法(ESDA)含Matlab源码 1439期

题目1439:Least Common Multiple(求m个正数的最小公倍数lcm)

dp--P1439 最长公共子序列(LCS)

1439 互质对

1439 筛法统计素数个数

P1439 模板最长公共子序列