最少攔截系統(LIS)

題目:最少攔截系統

題解:LIS問題,求最長升序子序列。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 7e6+10;
const int inf = 0x7FFFFFFF;

int f[N];
int ans = 0;


void solve(int x){
    if(ans == 0 || x > f[ans-1]) {
        f[ans++] = x;
        return;
    }
    int k = lower_bound(f,f+ans,x)-f;
    f[k] = x;
}
int main(){
    int x,n;
    while(~scanf("%d",&n)){
        memset(f,0,sizeof f);
        ans = 0;
        while(n--){
            scanf("%d",&x);
            solve(x);
        }
        cout<<ans<<endl;
    }
    
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章