前言: 大家一定要先看清数据范围,分析清楚再写 如E题 是可以纯暴力模拟的一题 且只需要40+行,

每次 直接暴力找p和q的连接段并进行排序

using namespace std;
typedef long long ll;
const int N = 2e5+8;
const int mod = 1e9+7;
ll n,m,k,a[N],b[N],p,q;
string s;
int main()
{
    cin>>n>>m>>k;
    cin>>s;
    for(int i=0;i<n;i++)a[i+1]=s[i]-'0';
    for(int i=1;i<=n;i++)cin>>b[i];
    int j=0;
    for(int i=1;i<=n;i=j){
        for(j=i+1;j<=n;j++){
            if(b[j]!=b[i])break;
        }
        if(j-i>1)sort(a+i,a+j,greater<ll>());
    }
    ll ans = 0;
    for(int i=1;i<=n;i++){
        ans=(ans*10+a[i])%mod;
    }
    cout<<ans<<endl;
    while(k--){
        cin>>p>>q;
        int r = 0;
        for(int i=1;i<=n;i++){
            if(b[i]==p||b[i]==q){
                if(b[i]==p)b[i]=q;
                for(r=i+1;r<=n;r++){
                    if(b[r]==p)b[r]=q;
                    if(b[r]!=q)break;
                }
                sort(a+i,a+r,greater<ll>());
                i=r;
            }
        }
        ans=0;
        for(int i=1;i<=n;i++){
            ans=(ans*10+a[i])%mod;
        }
        cout<<ans<<endl;
    }
}