导弹拦截第二个问题二分求调
查看原帖
导弹拦截第二个问题二分求调
1406515
hujinqi楼主2025/7/26 09:40
#include <iostream>
using namespace std;

int main() {
	int a[50005], b[50005], c[50005] = {}, n = 0, num = 0, maxn1 = -1;
	while (~scanf("%d", &a[n])) {

		int maxn = 0;
		for (int i = 0; i < n; i++) {
			if (a[i] >= a[n]) {
				maxn = b[i];
			}
		}
		b[n] = maxn + 1;
		if (maxn1 < b[n]) {
			maxn1 = b[n];
		}
		int s = 0, e = num, ans = -1;
		while (s <= e) {
			int mid = (s + e) / 2;
			if (c[mid] < a[n]) {
				ans = mid;
				e = mid - 1;
			} else {
				s = mid + 1;
			}
		}

		if (ans == -1) {
			num++;
			c[num] = a[n];
		} else {
			c[ans] = a[n];
		}
		n++;
	}
	cout << maxn1 << endl << num;
	return 0;
}

咋办?

2025/7/26 09:40
加载中...