排列(猜想歸納法)

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
AC Code\rm AC\ Code

#include <bits/stdc++.h>

const int N=50005;
int n,T,p[N],q[N],a[N],m;
int main()
{
	scanf("%d%d",&n,&T);
	for(int i=0;i<n;++i)scanf("%d",p+i),q[p[i]]=i;
	for(int i=1;i<=n;a[i++]=m)m+=q[i]<q[i-1];
	printf("%d\n",m=m?32-__builtin_clz(m):0);
	if(T)for(int i=0;i<=m;++i)
	{
		for(int j=0;j<n;++j)printf("%d%c",p[j],j==n-1?'\n':' ');
		std::stable_partition(p,p+n,[i](int x){return ~a[x]>>i&1;});
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章