原题传送门
根据字典序的方便性质
找到第一个可以更优的就换
换到第一个会更劣的为止
Code:
#include <bits/stdc++.h>
#define maxn 200010
using namespace std;
int n, a[maxn], b[maxn];
inline int read(){
int s = 0, w = 1;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') w = -1;
for (; isdigit(c); c = getchar()) s = (s << 1) + (s << 3) + (c ^ 48);
return s * w;
}
int main(){
n = read();
char c = getchar();
for (; !isdigit(c); c = getchar());
for (int i = 1; i <= n; ++i, c = getchar()) a[i] = c ^ 48;
for (int i = 1; i <= 9; ++i) b[i] = read();
/* scanf("%d", &n);
for (int i = 1; i <= n; ++i) scanf("%1d", &a[i]);
for (int i = 1; i <= 9; ++i) scanf("%d", &b[i]);*/
int l = 1;
while (b[a[l]] <= a[l] && l <= n) ++l;
while (b[a[l]] >= a[l] && l <= n) a[l] = b[a[l]], ++l;
for (int i = 1; i <= n; ++i) printf("%d", a[i]);
return 0;
}