洛谷数据有没有素质?
查看原帖
洛谷数据有没有素质?
119491
5ab_juruo楼主2023/1/5 16:55

前情提要:https://www.luogu.com.cn/discuss/show?postid=553164

我以下面这段代码测试,注意被注释的那一行:

#include <cstdio>
using namespace std;

const int max_n = 100000;
int dp[max_n+1] = {-2147483648}, arr[max_n], ans = 1;

int ser(int low)
{
	int l = 0, r = ans + 1, mid, ret;
	
	while (l < r)
	{
		mid = (l + r) >> 1;
		
		if (dp[mid] < low)
			ret = mid, l = mid + 1;
		else
			r = mid;
	}
	
	return ret + 1;
}

int main()
{
	int n, pos;
	
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
		scanf("%d", arr + i);
	
	dp[1] = arr[0];
	for (int i = 1; i < n; i++)
	{
        // if (arr[i] >= dp[ans])
        if (arr[i] > dp[ans])
        {
            dp[++ans] = arr[i];
            continue;
        }
		pos = ser(arr[i]);
		
		dp[pos] = arr[i];
		
		if (pos > ans)
			ans++;
	}
	
	printf("%d\n", ans);
	
	return 0;
}

显然,被注释的部分是错误的,可以被下面这组数据卡掉:

6
1 1 1 1 1 1

正确的输出是 11,上面那份错误的代码显然会输出 66

然后改成被注释的部分能过,实在是离了个大谱。

已经有人反馈过这个问题了:https://www.luogu.com.cn/discuss/show?postid=518643

2023/1/5 16:55
加载中...