30分求调
查看原帖
30分求调
1401095
zhangchengqi666楼主2025/1/28 13:11

萌新求条
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;
}

二分优化应该很正常吧……

2025/1/28 13:11
加载中...