WA求调
查看原帖
WA求调
1134175
Zeeed楼主2024/7/28 00:06
#include <bits/stdc++.h>
using ll = long long;
using namespace std;
const int N = 5e4 + 10;
int dp[N], a[N], b[N], cnt;
int find(int x)
{
	int l = 1, r = cnt;
	while(l < r)
	{
		int mid = (l + r) >> 1;
		if(dp[mid] <= x)//第一个小于等于x的数
			r = mid;
		else
			l = mid + 1;
	}
	return l;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	int x, n = 1;
	while(cin >> x)
	{
		a[n++] = x;
	}
	dp[1] = a[1];
	cnt = 1;
	int ans = 1;
	for(int i = 2; i < n; i++)
	{
		if(a[i] <= dp[cnt])
			dp[++cnt] = a[i];
		else
		{
			int j = find(a[i]);
			//cout << dp[j] << " ";
				dp[j] = a[i];
		}
	}
	cout << cnt << "\n";
	cnt = 1;
	b[1] = a[1];
	for(int i = 2; i < n; i++)
	{
		int l = 1, r = cnt;
		while(l < r)
		{
			int mid = (l + r) >> 1;
			if(b[mid] >= a[i])//第一个比a[i]大的
				r = mid;
			else
				l = mid + 1;
		}
		if(b[l] >= a[i])
			b[l] = a[i];
		else
			b[++cnt] = a[i], ans++;
	}
	cout << ans;
	return 0;
}

只过了两个测试点(第二问貌似没问题, 主要是第一问)

2024/7/28 00:06
加载中...