Codeforces Round #582 (Div. 3) F. Unstable String Sort(差分标记)

题目链接
在这里插入图片描述
思路:对于初始的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);
}
发布了144 篇原创文章 · 获赞 0 · 访问量 4946

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/104486765