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;

}

你可能感兴趣的:(IO)