#如果!定义的HAVE_PERMQ_H__#定义HAVE_PERMQ_H__//此文件是FXT库的一部分。//版权所有(C)2010、2012、2014、2018、2023、2024 Joerg Arndt//许可证:GNU通用公共许可证版本3或更高版本,//请参阅主目录中的文件COPYING.txt。//#包括“ds/bitarray.h”类位数组;//#包括“ds/left-rightarray.h”类left_right_array;#包括“fxttypes.h”静态内联bool permis_identity(constulong*f,ulong n)//返回f[]是否为相同置换,//也就是说,对于所有k=0…n-1,f〔k〕==k{对于(ulong k=0;kk、。//如果eq==false,则返回k的数量,这样f[k]k);对于(ulong k=0;kj)ni+=1;}返回ni;}// -------------------------静态内联ulong perm_count_left_deplacements(constulong*f,ulong n)//A369376{ulong-ni=0;对于(ulong j=0;jm)m=fk;如果(m<=k)返回false;}返回true;}// -------------------------静态内联bool permis_updown_permutation(constulong*f,ulong n)//返回f是否为up-down条件,//也就是说,无论f[0]<f[1]>f[2]<f[3]>。。。{如果(n<2)返回true;对于(ulong k=1;k=f[k-1])返回false;}返回true;}// -------------------------静态内联bool permis循环(constulong*f,ulong n)//返回置换是否正好是一个循环。{如果(n<=1)返回true;ulong k=0,e=0;在(e!=0)时执行{e=f[e];++k;};返回(k==n);}// -------------------------静态内联bool permis_involution(constulong*f,ulongn,bool hint=false)//返回最大循环长度是否<=2,//也就是说,无论f*f=id。//如果预期排列为,则将hint设置为true//内卷化{if(提示){ulong z=0;对于(ulong k=0;kf[k])i+=k;返回i;}// -------------------------静态内联ulong perm_major_index(constulong*f,ulong n){如果(n<=1)返回0;ulong s=0;--n;对于(ulong j=0;jf[j+1))s+=(j+1);返回s;}// -------------------------//perm/permq.cc:ulong perm_count_inversions(constulong*f,ulong n);ulong perm_count_inversions(常量ulong*f,ulongn,left_right_array*tLR);bool perm_is_valid(constulong*f,ulong n,bitrarray*bp=nullptr);ulong perm_count_transpositions(constulong*f,ulong n,位数组*bp=nullptr);ulong perm_get_parity(constulong*f,ulong n,位数组*bp=nullptr);ulong perm_count_cycles(constulong*f,ulong n,位数组*bp=nullptr);bool perm_is_simple(constulong*f,ulong n);//ulong perm_get_periods(constulong*f,ulong n,ulong*p,位数组*bp=nullptr);//:用于将排列应用于数据的函数//:在perm/permapply.h中找到//:随机排列函数//:在perm/permrand.h中找到#endif//!定义的HAVE_PERMQ_H__