萌新求条
30pts,前三个点AC,后面全WA
#include <bits/stdc++.h>
using namespace std;
int a[50005], f[50005];
int n, cnt;
int upper(int x) {
int ans = 0, l = 0, r = n;
while (l <= r) {
int mid = l + r >> 1;
if (f[mid] < x) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans + 1;
}
int main(void) {
memset(f, 0x3f, sizeof f);
cin >> n;
f[0] = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
cnt = upper(a[i]);
f[cnt] = min(f[cnt], a[i]);
}
int ans = 0;
for (int i = 1; i <= n; i++) {
if (f[i] != 0x3f3f3f3f) {
ans = max(ans, i);
}
}
cout << ans;
return 0;
}
二分优化应该很正常吧……