187A Permutations
这道题和“扑克牌排序”很相似,但是并不是排成升序,可以用同一种方式对两个序列排序,使第二个为升序,此时第一个序列就成了“扑克牌排序”的情况,只需要统计出第一次逆序出现的位置即可,由于是排列,可以用 O(n) 的方法来做;
# include <cstdio> # define N 200010 int n, a[N], b[N]; int p[N]; void init(void) { scanf("%d", &n); for (int i = 1; i <= n; ++i) scanf("%d", &a[i]); for (int i = 1; i <= n; ++i) { scanf("%d", &b[i]); p[b[i]] = i; } } void solve(void) { int i; for (i = 1; i < n; ++i) { if (p[a[i]] > p[a[i+1]]) break; } printf("%d\n", n-i); } int main() { // freopen("in.txt", "r", stdin); init(); solve(); return 0; }