BZOJ3301 P2524 UVA11525 算法解释康托展开
这三个题的代码分别对应第二个第一个第三个
在刘汝佳蓝书上我遇到了这个康托展开题。
当时去了解了一下,发现很有意思
百度上的康托展开定义
原理介绍
康托展开运算


为整数,并且

。

的意义为在ai之后出现的数有几个比他小
康托展开的逆运算
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define mod 19260817
int n,m,a,b,c,ans=,list[],visit[];
void makelist(){
list[]=;
for(int i=;i<=;i++)
list[i]=(list[i-]%mod)*i%mod;
}
string s;
int main(){
cin>>n;
memset(visit,,sizeof(visit));
makelist();
cin>>s;
for(int i=;i<s.length();i++){
a=s[i]-'';visit[a]=;
m=;
for(int j=;j<a;j++){
if(!visit[j])m++;
}
ans+=list[n--i]*m;
}
cout<<ans+;
return ;
}
轮到正解了(bzoj3301)
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define mod 19260817
int n,m,a,b,c,ans=,list[],input[],tree[];
int lowbit(int x){return x&(-x);}
int query(int x){int ans=;for(int i=x;i>;i-=lowbit(i))ans+=tree[i];return ans;}
void add(int p,int x){for(int i=p;i<=n;i+=lowbit(i))tree[i]+=x;}
void makelist(){
list[]=;
for(int i=;i<=;i++)
list[i]=(list[i-]%mod)*i%mod;
}
int main(){
cin>>n;
makelist();
for(int i=;i<=n;i++)
cin>>input[i];
for(int i=;i<=n;i++){
a=input[i];add(a,);
m=a-query(a);
ans+=list[n-i]*m;
}
cout<<ans+;
return ;
}
那逆运算呢
由于我们知道ai<n
所以我们观察到(n-i)!*ai<n!
可以推出x/(n-i)!=ai;(下取整)
问题转化为二位偏序,前缀第k大
就可以用树状数组解决(也可以用主席树)
代码参考的candy博主
uva1125
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N=5e5+,INF=1e6+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,x,k;
int c[N];
inline int lowbit(int x){return x&-x;}
inline void add(int p,int v){
for(;p<=n;p+=lowbit(p)) c[p]+=v;
}
inline int sum(int p){
int res=;
for(;p>;p-=lowbit(p)) res+=c[p];
return res;
}
inline int kth(int k){
int x=,cnt=;
for(int i=;i>=;i--){
x+=(<<i);
if(x>=n||cnt+c[x]>=k) x-=(<<i);
else cnt+=c[x];
}
return x+;
}
int main(){
int T=read();
while(T--){
n=read();
memset(c,,sizeof(c));
for(int i=;i<=n;i++) add(i,);
for(int i=;i<=n;i++){
k=read()+;
x=kth(k);
cout<<x<<" ";
add(x,-);
}
}
}
BZOJ3301 P2524 UVA11525 算法解释康托展开的更多相关文章
- [算法总结]康托展开Cantor Expansion
目录 一.关于康托展开 1.什么是康托展开 2.康托展开实现原理 二.具体实施 1.模板 一.关于康托展开 1.什么是康托展开 求出给定一个由1n个整数组成的任意排列在1n的全排列中的位置. 解决这样 ...
- POJ 1077 && HDU 1043 Eight A*算法,bfs,康托展开,hash 难度:3
http://poj.org/problem?id=1077 http://acm.hdu.edu.cn/showproblem.php?pid=1043 X=a[n]*(n-1)!+a[n-1]*( ...
- 【算法进阶-康托展开】-C++
目录 引入 这位老爷子就是康托 基本概念 康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩.设有n个数(1,2,3,4,-,n),可以有组成不同(n!种)的排列组合,康托展开表 ...
- 数学【P2524】 Uim的情人节礼物·其之弐 (康托展开)
因为某人@ZAGER挖坑让我讲一下康托展开,所以发现了这个题,顺便说一下康托展开是个什么东西 题目概括 给定n与一个数列,要求求出给定数列在n的全排列中的排名(按照字典序从小到大排列) 康托展开 先放 ...
- UVA11525 Permutation[康托展开 树状数组求第k小值]
UVA - 11525 Permutation 题意:输出1~n的所有排列,字典序大小第∑k1Si∗(K−i)!个 学了好多知识 1.康托展开 X=a[n]*(n-1)!+a[n-1]*(n-2)!+ ...
- 康托展开&逆展开算法笔记
康托展开(有关全排列) 康托展开:已知一个排列,求这个排列在全排列中是第几个 康托展开逆运算:已知在全排列中排第几,求这个排列 定义: X=an(n-1)!+an-1(n-2)!+...+ai(i-1 ...
- OJ 1188 全排列---康托展开
题目描述 求n的从小到大第m个全排列(n≤20). 输入 n和m 输出 输出第m个全排列,两个数之间有一空格. 样例输入 3 2 样例输出 1 3 2 #include<cstdio> # ...
- hdu1430魔板(BFS+康托展开)
做这题先看:http://blog.csdn.net/u010372095/article/details/9904497 Problem Description 在魔方风靡全球之后不久,Rubik先 ...
- 洛谷P2525 Uim的情人节礼物·其之壱 [康托展开]
题目传送门 Uim的情人节礼物·其之壱 题目描述 情人节到了,Uim打算给他的后宫们准备情人节礼物.UIm一共有N(1<=N<=9)个后宫妹子(现充去死 挫骨扬灰!). 为了维护他的后宫的 ...
随机推荐
- suse 11入门学习
1 去掉显示隐藏文件的默认配置 vi /etc/bash.bashrc 找到 ; then LS_OPTIONS="-A -N $LS_OPTIONS -T 0" else LS_ ...
- 使用MethodSwizzle导致按home app进入后台或者app间切换发生crash的解决方法
参考文章: 1.http://blog.csdn.net/alincexiaohao/article/details/45913857 2.http://www.cocoachina.com/ios/ ...
- 线程安全 原子性 可见性 顺序性 volatile
- Hexo - Template render error unexpected token
问题与分析 今天发现在使用hexo g时报错如下: FATAL Something's wrong. Maybe you can find the solution here: http://hexo ...
- ios 微信登录相关
引入项目的文件 info.plist 添加内容 WXApi.registerApp(Config.wx.APP_ID,enableMTA: true)//注册微信api(在AppDelegate里面注 ...
- [题解](次短路)luogu_P2865路障(未)
好像是个不需要vis数组的次短路,跑到收敛,然而给我脑袋弄炸了......到现在还没懂.......究竟次短路应该怎么求a...... 抄题解: #include<bits/stdc++.h&g ...
- Linux (三)
chmod :用来改变文件或目录的访问权限 语法格式:chmod [参数选项] [mode][文件或者目录] 参数选项: -v :显示权限变更的详细信息 -R :对当前目录下的所有文件以及子目录进行相 ...
- laravel-admin 自定义导出表单
官方导出文档 laravel-admin自带的导出excel会导出与此模型关联的其他数据.所以参考官方文档调整代码 文章表:id,title,user_id 用户表:id,username //文章模 ...
- bat脚本启动Burp
我的burp点击之后并不会直接打开,需要用命令启动,所以在网上找了一下快捷启动的方法. ①新建一个文本文档,输入start javaw -jar “burp路径”, ②另存为***.bat,文件类型选 ...
- 语义分割丨DeepLab系列总结「v1、v2、v3、v3+」
花了点时间梳理了一下DeepLab系列的工作,主要关注每篇工作的背景和贡献,理清它们之间的联系,而实验和部分细节并没有过多介绍,请见谅. DeepLabv1 Semantic image segmen ...