A - Misha and Permutations Summation

首先这个 mod n! 因为数量级上的差别最多只会对康拓展开的第一项起作用所以这个题并不需要把 ord (p) 和 ord (q) 的具体值算出来,因为最后还需要进行康托逆展开所以用一 个数组来储存对应的值即可然后利用变进制的思想把 s[ ] 数组处理一下即可

变进制处理 s[ ] 数组:

for(int i=n-1;i>=1;--i)
s[i-1]+=s[i]/(n-i+1),s[i]=s[i]%(n-i+1);

代码:

// Created by CAD on 2019/8/10.
#include <bits/stdc++.h>
#define mst(name, value) memset(name,value,sizeof(name))
#define lowbit(x) (x&(-x))
using namespace std;
using pii=pair<int, int>;
using piii=pair<pair<int, int>, int>;
using ll=long long; const int maxn=2e5+5;
int p[maxn],q[maxn];
int c[maxn],s[maxn];
int num[maxn],n;
void add(int x,int k)
{
while(x<=n)
c[x]+=k,x+=lowbit(x);
}
ll getsum(int x)
{
ll ans=0;
while(x>0)
ans+=c[x],x-=lowbit(x);
return ans;
}
void init()
{
mst(c,0);
for(int i=1;i<=n;++i) add(i,1);
} int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n;
init();
for(int i=1;i<=n;++i)
{
cin>>p[i],p[i]++;
s[i]+=getsum(p[i]-1);
add(p[i],-1);
}
init();
for(int i=1;i<=n;++i)
{
cin>>q[i],q[i]++;
s[i]+=getsum(q[i]-1);
add(q[i],-1);
}
for(int i=n-1;i>=1;--i)
s[i-1]+=s[i]/(n-i+1),s[i]=s[i]%(n-i+1);
init();
for(int i=1;i<=n;++i)
{
int l=1,r=n,ans;
while(l<=r)
{
int mid=(l+r)>>1;
if(getsum(mid-1)<=s[i])
l=mid+1,ans=mid;
else r=mid-1;
}
num[i]=ans;
add(ans,-1);
}
for(int i=1;i<n;++i) cout<<num[i]-1<<' ';
cout<<num[n]-1<<endl;
return 0;
}

Misha and Permutations Summation的更多相关文章

  1. Codeforces Round #285 (Div.1 B & Div.2 D) Misha and Permutations Summation --二分+树状数组

    题意:给出两个排列,求出每个排列在全排列的排行,相加,模上n!(全排列个数)得出一个数k,求出排行为k的排列. 解法:首先要得出定位方法,即知道某个排列是第几个排列.比如 (0, 1, 2), (0, ...

  2. [Codeforces 501D] - Misha and Permutations Summation

    题意是给你两个长度为$n$的排列,他们分别是$n$的第$a$个和第$b$个全排列.输出$n$的第$\left(a+b \right)\textrm{mod} \, n!$个全排列. 一种很容易的想法是 ...

  3. Codeforces Round #285 (Div. 1) B - Misha and Permutations Summation 康拓展开+平衡树

    思路:很裸的康拓展开.. 我的平衡树居然跑的比树状数组+二分还慢.. #include<bits/stdc++.h> #define LL long long #define fi fir ...

  4. CF501D Misha and Permutations Summation(康托展开)

    将一个排列映射到一个数的方法就叫做康托展开.它的具体做法是这样的,对于一个给定的排列{ai}(i=1,2,3...n),对于每个ai求有多少个aj,使得j>i且ai>aj,简单来说就是求a ...

  5. 【codeforces 501D】Misha and Permutations Summation

    [题目链接]:http://codeforces.com/problemset/problem/501/D [题意] 给你两个排列; 求出它们的字典序num1和num2; 然后让你求出第(num1+n ...

  6. CF数据结构练习

    1. CF 438D The Child and Sequence 大意: n元素序列, m个操作: 1,询问区间和. 2,区间对m取模. 3,单点修改 维护最大值, 取模时暴力对所有>m的数取 ...

  7. Permutations II

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  8. [LeetCode] Permutations II 全排列之二

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  9. [LeetCode] Permutations 全排列

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...

随机推荐

  1. 面试35-删除字符串重复字符-删除出现在第二个字符串中的字符-第一个只出现一次的字符-hash表计数

    #include<iostream>#include<algorithm>#include<functional>using namespace std;char ...

  2. 基于IdentityServer4的声明的授权

    ## 概述 基于Asp.net Core 1.1 ,使用IdentityServer4认证与授权. ## 参考资料 [微软教程](https://docs.microsoft.com/zh-cn/as ...

  3. CentOS7部署kettle

    去官网下载kettle, 或者百度网盘下载(nnnk),解压到目录/opt/service/, 解压后的目录是data-integration kettle需要java环境才能运行,因此要安装Java ...

  4. Centos7:dubbo监控中心安装,配置和使用

    制作dubbo-admin.war文件 下载dubbo-admin https://github.com/alibaba/dubbo 注:2.6版本后源码中不包含dubbo-admin工程 在dubb ...

  5. cube-ui indexList的正确使用

    demo地址:https://github.com/zphtown/cube-ui-bug 上拉和下拉核心代码: onPullingDown () { this.isNoMore = false th ...

  6. 一文搞懂网络知识,IP、子网掩码、网关、DNS、端口号

    网络的基本概念 客户端:应用 C/S(客户端/服务器) B/S(浏览器/服务器) 服务器:为客户端提供服务.数据.资源的机器 请求:客户端向服务器索取数据 响应:服务器对客户端请求作出反应,一般是返回 ...

  7. bagging and boosting

    bagging 侧重于降低方差 方差-variance 方差描述的是预测值的变化范围,离散程度,也就是离期真实值的距离.方差过大表现为过拟合,训练数据的预测f-score很高,但是验证或测试数据的预测 ...

  8. 【转载】java工程师学习之路---给自己的目标

    想学习或者提升java的可以看看,单从java角度来看总结的虽然还是很全面的,主要是为了自己看 http://blog.csdn.net/peace1213/article/details/50849 ...

  9. Windwos Java‘bat 环境变量配置脚本

    @echo off echo 正在设置Java环境变量 pause wmic ENVIRONMENT create name="JAVA_HOME",username=" ...

  10. python中的定时任务

    使用threading模块中的Timer函数 from threading import Timer import time def execute_func(name, age, gender, h ...