专栏文章

题解:P8184 [USACO22FEB] Photoshoot 2 B

P8184题解参与者 2已保存评论 1

文章操作

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

当前评论
1 条
当前快照
1 份
快照标识符
@mip1vndi
此快照首次捕获于
2025/12/03 04:48
3 个月前
此快照最后确认于
2025/12/03 04:48
3 个月前
查看原文
这一题本质上是一种类逆序对
我们可以建立一个数组 pospos 表示一个值在目标序列 bb 中的位置,即:
posbi=i(1in)pos _ {b _ {i}}=i (1≤i≤n)
那么,由于序列 aa 中的每一个数字都会在序列 bb 中出现
所以我们就能令 ai=posaia _ {i} = pos _ {a _ {i}}
于是,就可用类似于逆序对的方法求解。

Code:

CPP
#include <bits/stdc++.h>
using namespace std;

int n, a[100005], b[100005], p[100005];

int main() {
	cin >> n;
	for (int i = 1; i <= n; i ++) cin >> a[i];
	for (int i = 1; i <= n; i ++) {
		cin >> b[i];
		p[b[i]] = i;
	}
	for (int i = 1; i <= n; i ++) a[i] = p[a[i]];
	int ans = 0, maxn = 0;
	for (int i = 1; i <= n; i ++) {
		if (maxn > a[i]) ans ++;
		maxn = max(maxn, a[i]);
	}
	cout << ans << endl;
	return 0;
}

评论

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

正在加载评论...