'commit'
This commit is contained in:
38
TangDou/AcWing/LIS/896_ErFen.cpp
Normal file
38
TangDou/AcWing/LIS/896_ErFen.cpp
Normal file
@@ -0,0 +1,38 @@
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
const int N = 1e5 + 10;
|
||||
|
||||
int a[N];
|
||||
int f[N], idx;
|
||||
|
||||
int find(int x) {
|
||||
int l = 1, r = idx; //左闭右闭
|
||||
while (l < r) {
|
||||
int mid = (l + r) >> 1;
|
||||
if (f[mid] >= x)
|
||||
r = mid;
|
||||
else
|
||||
l = mid + 1;
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
int main() {
|
||||
int n;
|
||||
scanf("%d", &n);
|
||||
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
|
||||
|
||||
f[++idx] = a[1];
|
||||
|
||||
for (int i = 2; i <= n; i++)
|
||||
if (a[i] > f[idx])
|
||||
f[++idx] = a[i];
|
||||
else {
|
||||
int pos = find(a[i]);
|
||||
f[pos] = a[i];
|
||||
}
|
||||
|
||||
printf("%d\n", idx);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user