专栏文章
题解:P13788 「CZOI-R6」Permutation and Subsequence
P13788题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mio7e04f
- 此快照首次捕获于
- 2025/12/02 14:34 3 个月前
- 此快照最后确认于
- 2025/12/02 14:34 3 个月前
看了一下别人的代码,貌似没有和我一样的?
题目意思比较明了,这里不在复述。
思路
首先我们观察题目,发现 和 数组都是一个排列,这意味着每个数在 中都有唯一的位置。
不难想到我们可以用一个 数组,来存储每个 在 数组中的位置。
那么,问题就转化成了:统计 数组中所有递增的非空连续子段的数量。
这是因为要使得 的连续子段是 的子序列,当且仅当对应的 的子段是递增的。
最后,要注意的是爆
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 条评论,欢迎与作者交流。
正在加载评论...