题解 CF1557B 【Moamen and k-subarrays】


CF1557B Moamen and k-subarrays

题目大意:

给定一个大小为 \(n\) 的数组。你可以将其分为 \(k\) 个子数组,并按照每个子数组的字典序重新排列这些子数组,再顺次拼接,得到一个新的数组。问是否存在一种划分子数组的方案,使得重新拼接后的数组是单调不降的?

solution:

我们可以先将原数组排好序,用有序的数组与原数组比较。我们发现,两个可以在一个子数组里的数在有序数组里一定是相邻的。所以我们检查原数组,看 \(a_i\)\(a_{i+1}\) 是否是相邻的即可,用一个类似离散化的写法。

代码
#include
#include
using namespace std;
const int N=3e5+5;
int a[N],c[N];
struct node{
	int x,w;
}b[N];
inline bool cmp(node p,node q){ return p.w=k) puts("No");//这里 ans其实应该从 1 开始,我这里是0,所以是≥
		else	   puts("Yes");
	}
	return 0;
}

End