• 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;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    货币
    沙漏
    秋季学习总结
    三个老师
    介绍自己
    redis 的部分配置
    第二次博客作业
    第一次阅读作业
    shell_通配符
    shell_/dev/null,>和&
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10516761.html
Copyright © 2020-2023  润新知