社区讨论

LIS 求 LCS 方法全 WA 求调

P1439两个排列的最长公共子序列参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mhj9fy0j
此快照首次捕获于
2025/11/03 22:53
4 个月前
此快照最后确认于
2025/11/03 22:53
4 个月前
查看原帖
RT,我下载了第一个样例但发现答案正确,我不明白为什么会 WA。
原代码:
CPP
#include <bits/stdc++.h>
//#define int long long
using namespace std;
const int N = (int)1e5 + 5;
const int INF = (int)1e18;

int n, len, p1[N], p2[N], id[N], dp[N];

signed main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)	{scanf("%d", &p1[i]); id[p1[i]] = i;}
	for (int i = 1; i <= n; i++)	{scanf("%d", &p2[i]); p2[i] = id[p2[i]];}
//	for (int i = 1; i <= n; i++)	printf("%lld ", p2[i]);
	dp[0] = -INF;
	for (int i = 1; i <= n; i++) {
		if (p2[i] >= dp[len])	dp[++len] = p2[i];
		else {
			int pos = lower_bound(dp + 1, dp + 1 + len, p2[i]) - dp;
			dp[pos] = p2[i];
		}
	}
	printf("%d", len);
	return 0;
}
测试点 1: 输入: 5
5 3 2 1 4
3 5 4 2 1
输出:3

回复

3 条回复,欢迎继续交流。

正在加载回复...