专栏文章

题解:P13788 「CZOI-R6」Permutation and Subsequence

P13788题解参与者 1已保存评论 0

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@mio7e04f
此快照首次捕获于
2025/12/02 14:34
3 个月前
此快照最后确认于
2025/12/02 14:34
3 个月前
查看原文
看了一下别人的代码,貌似没有和我一样的?
题目意思比较明了,这里不在复述。

思路

首先我们观察题目,发现 aabb 数组都是一个排列,这意味着每个数在 bb 中都有唯一的位置。
不难想到我们可以用一个 cc 数组,来存储每个 aia_ibb 数组中的位置。
那么,问题就转化成了:统计 cc 数组中所有递增的非空连续子段的数量
这是因为要使得 aa 的连续子段是 bb 的子序列,当且仅当对应的 cc 的子段是递增的。
最后,要注意的是爆int

代码

CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,a[1000010],b[1000010],c[1000010],d[1000010],ans,cnt = 1;
signed main(){
	cin >> n;
	for (int i = 1;i <= n;i++) cin >> a[i];
	for (int i = 1;i <= n;i++) cin >> b[i],c[b[i]] = i;
	for (int i = 1;i <= n;i++) d[i] = c[a[i]];
	for (int i = 1;i <= n;i++){
		if (i > 1 && d[i] <= d[i - 1]) cnt = i;
		ans += i - cnt + 1;
	}
	cout << ans << endl;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...