10pts求条
查看原帖
10pts求条
1075989
BlauAnthony楼主2025/6/15 16:23

https://www.luogu.com.cn/record/220613961

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100001;
int t[maxn],n;
int lowbit(int x){
    return x&-x;
}
void add(int x,int num){
    for(int i=x;i<=n;i+=lowbit(i))
        t[i]=max(t[i],num);
}
int get(int x){
    int ans=0;
    for(int i=x;i;i-=lowbit(i))
        ans=max(ans,t[i]);
    return ans;
}
int main(){
    cin>>n;
    int a[n+1],b[n+1],c[n+1];
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++)cin>>b[i],c[i]=b[i];
    sort(b+1,b+n+1);
    for(int i=1,left,mid,right;i<=n;i++){
        left=1,right=n;
        while(left<right){
            mid=(right+left)>>1;
            if(b[mid]<a[i])left=mid+1;
            else right=mid;
        }
        a[i]=left;
    }
    int f[n+1];
    f[1]=1;
    add(a[1],f[1]); 
    for(int i=2;i<=n;i++){
        f[i]=get(a[i])+1;
        add(a[i],f[i]);
    }
    cout<<f[n];
    return 0;
}
2025/6/15 16:23
加载中...