題目:最少攔截系統
題解: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;
}