博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[洛谷P5367]【模板】康托展开
阅读量:5134 次
发布时间:2019-06-13

本文共 1015 字,大约阅读时间需要 3 分钟。

题目大意:给定一个$n$的排列,求它在$n$的全排列中的名次

题解:康托展开,对于一个全排列,第$i$为有$n+1-i$种选择,用变进制数表示,这一位就是$n+1-i$进制。记排列中第$[1,i)$中比第$i$位小的数个数位$a$,变进制数中第$i$位的数为$i-a-1$。可以用树状数组维护

卡点:

 

C++ Code:

#include 
#include
#include
#define maxn 1000010#define mul(a, b) (static_cast
(a) * (b) % mod)const int mod = 998244353;inline void reduce(int &x) { x += x >> 31 & mod; }int fac[maxn], ans = 1, n;namespace BIT { int V[maxn], res; inline void add(int p) { for (; p <= n; p += p & -p) ++V[p]; } inline int query(int p) { for (res = 0; p; p &= p - 1) res += V[p]; return res; }}int main() { std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0); std::cin >> n; fac[0] = 1; for (int i = 1; i <= n; ++i) fac[i] = mul(fac[i - 1], i); for (int i = 1, x; i <= n; ++i) { std::cin >> x; reduce(ans += mul(x - BIT::query(x) - 1, fac[n - i]) - mod); BIT::add(x); } std::cout << ans << '\n'; return 0;}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/11161585.html

你可能感兴趣的文章
类的继承查询策略:广度优先
查看>>
第三次作业
查看>>
Django中Celery简介
查看>>
hadoop之转载
查看>>
AOP面向方面编程
查看>>
ob_start()函数
查看>>
【JS笔记】5.1 Object类型
查看>>
【BZOJ4025】二分图(可撤销并查集+线段树分治)
查看>>
uml的图与代码的转换——类图
查看>>
吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
查看>>
MVVM 下 ContextMenu的命令绑定
查看>>
GIS基础软件及操作(五)
查看>>
SQLSERVER使用密码加密备份文件以防止未经授权还原数据库
查看>>
C#不登录电脑启动程序
查看>>
ASP.NET缓存中Cache过期的三种策略
查看>>
6天通吃树结构—— 第一天 二叉查找树
查看>>
理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
查看>>
Windows 8实例教程系列 - 布局控制
查看>>
章节2:SQL之多表连接
查看>>
silverlight下多线程处理
查看>>