1.1歧路?捷径?AC代码。拿去记得给零食!!!

biggayboy 2020-12-02 18:57:12 2020-12-09 19:31:58

#include<bits/stdc++.h>

typedef long long lld;

const int N = 1e5 + 9, mod = 1e9 + 7;

int n, m, a[N], frac[N], tr[N];

inline int lowbit(int x) 

{

return x & (-x); 

} 

void insert(int x) 

{

while (x <= n) 
{
	++tr[x]; x += lowbit(x);
}


} 

int query(int x) 

{ 

int s = 0; 
while (x) 
{ 
s += tr[x]; 
x -= lowbit(x); 
} 
return s;

}

int cantor() 

{ 

	memset(tr, 0, sizeof tr);
	int s = 0;
	for (int i = 0; i < n; ++i) 
	{
	int t = (n - a[i]) - (i - query(a[i]));
	insert(a[i]);
	s = (s + (lld)t * frac[n - 1 - i]) % mod;
	}
	return (s + 1) % mod;

}

int main() 

{ 

	scanf("%d%d", &n, &m);
	frac[0] = 1;
	for (int i = 1; i < n; ++i) 
	frac[i] = (lld)frac[i - 1] * i % mod;
	while (m--) 
	{
		for (int i = 0; i < n; ++i) scanf("%d", a + i);
		printf("%d\n", cantor());
	}

}

共 2 条回复

zmk_father

#include     //STL通用算法 #include      //STL位集容器 #include //字符处理 #include      //定义错误码 #include     //定义本地化函数 #include      //定义数学函数 #include      //复数类 #include     //定义输入/输出函数 #include     //定义杂项函数及内存分配函数 #include     //字符串处理 #include      //定义关于时间的函数 #include       //STL双端队列容器 #include     //异常处理类 #include    //文件输入/输出 #include    //STL定义运算函数(代替运算符) #include     //定义各种数据类型最值常量 #include       //STL线性列表容器 #include        //STL 映射容器 #include    //参数化输入/输出 #include       //基本输入/输出支持 #include     //输入/输出系统使用的前置声明 #include    //数据流输入/输出 #include      //基本输入流 #include      //基本输出流 #include       //STL队列容器 #include        //STL 集合容器 #include     //基于字符串的流 #include       //STL堆栈容器     #include     //标准异常类 #include    //底层输入/输出支持 #include      //字符串类 #include      //STL通用模板类 #include      //STL动态数组容器 #include     //宽字符处理及输入/输出 #include

灭迹

零食已经拿到了,谢谢楼主!!!