Codeforces Round #546 (Div. 2)D(贪心,思维,SET,VECTOR,模拟)

时间:2023-03-09 14:35:32
Codeforces Round #546 (Div. 2)D(贪心,思维,SET,VECTOR,模拟)

#include<bits/stdc++.h>
using namespace std;
int a[300007],b[500007],c[500007];
set<int>st[300007];
vector<int>v;
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        v.push_back(a[i]);
    }
    int cnt=0;
    for(int i=1;i<=m;i++){
        scanf("%d%d",&b[i],&c[i]);
        st[b[i]].insert(c[i]);
    }
    v.pop_back();
    int ans=0;
    for(int i=(int)v.size()-1;i>=0;i--){//从后向前是为了保证只要i>=0就可以循环下去,不会使循环跑不完就停止
        int tmp=v[i];
        for(int j=i+1;j<v.size();j++){//从前向后换,可以让a[n]先和原先靠前的换后再和原先靠后的换,从而换的更远
            if(st[tmp].count(v[j])){
                swap(v[j],v[j-1]);
            }
            else
                break;
        }
        if(st[v.back()].count(a[n]))//队尾可以换到a[n]后面的话,彻底删除他
            v.pop_back();
    }
    ans=n-v.size()-1;
    printf("%d",ans);
    return 0;
}