1. 程式人生 > >CF1073B. Vasya and Books(模擬)

CF1073B. Vasya and Books(模擬)

題目連結:http://codeforces.com/contest/1073/problem/B題目:有n本編號為1~n的書放在一個棧裡a[1]是棧頂 a[n]是棧底,然後按照b[1]…b[n]的順序執行操作b[i]將書放進書包裡執行第i個操作時,假設b[i] = x 如果x還在棧a中那麼將a中x及之前所有的書都放進書包裡否則忽視這個操作,求出每一個操作放進書包多少本書。

思路:開標記陣列,暴力模擬即可。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5+10;
int a[maxn], b[maxn],v[maxn], w[maxn];
int main()
{
    int n, cnt = 1; scanf("%d",&n);
    for(int i = 0; i < n; i++) scanf("%d",&a[i]);
    for(int i = 0; i < n; i++) scanf("%d",&b[i]);
    int j = 0;
    for(int i = 0; i < n; i++)
    {
        if(v[b[i]]) continue;
        while(1)
        {
            w[i]++; v[a[j++]]++;
            if(v[b[i]]) break;
        }

    }
    for(int i = 0; i < n; i++)
        printf("%d ",w[i]);
}