前言: 大家一定要先看清数据范围,分析清楚再写 如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;
}
}