题目链接
思路:对于初始的p数组我们知道它肯定是单调不递减的,那么存在着一种情况就是p【i】<p【j】但是q【i】>q【j】,那么在i到j之间的数满足要求的就是让他们相等了,这个区间用差分数组标记一下。
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+1;
int n,k,p[maxn],q[maxn],size[maxn],num[maxn],ans[maxn],sum=0;
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;++i) scanf("%d",&p[i]),size[p[i]]=i;
for(int i=1;i<=n;++i) scanf("%d",&q[i]);
for(int i=1;i<n;++i)
if(size[q[i+1]]<size[q[i]]) num[size[q[i+1]]]++,num[size[q[i]]]--;
for(int i=1;i<=n;++i)
ans[i]=ans[i-1]+(sum>0?0:1),sum+=num[i];
if(ans[n]<k){
puts("NO");return 0;
}
puts("YES");
for(int i=1;i<=n;++i) printf("%c",min(ans[size[i]],k)+'a'-1);
}