CF1081G Mergesort Strikes Back
题目大意:
给定\(n\),\(k\),\(mod\),求随机排列在\(k\)层归并排序下逆序对的期望。
题解
考虑这\(k\)层归并会把序列分成若干个块。
这些块内的顺序是原序列的相对顺序,我们要把这些序列归并起来。
考虑一个块内,每对元素都会有\(\frac{1}{2}\)的概率成为一个逆序对.
所以每个块的贡献就是\(\binom{n}{2}\frac{1}{2}\)。
再考虑块之间的贡献,对于两个元素不在一个块内,考虑这两个元素到它们的块头的序列。如果这两个序列的最大值是这两个元素之一,那么它们肯定不会成为逆序对(思考归并排序的过程),否则它们的位置关系就和它们本身无关了,那么它们成为逆序对的概率还是\(\frac{1}{2}\),最后就是\(\frac{i+j-2}{2*(i+j)}\)
所以我们枚举每种块的长度值算一下就好了。
代码
#include<bits/stdc++.h>
#define N 100009
using namespace std;
typedef long long ll;
int n,k,mod;
ll inv[N],sum[N],ans;
map<int,int>tong;
map<int,int>::iterator it1,it2;
inline ll rd(){
ll x=0;char c=getchar();bool f=0;
while(!isdigit(c)){if(c=='-')f=1;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return f?-x:x;
}
inline ll power(ll x,ll y){
ll ans=1;
while(y){
if(y&1)ans=ans*x%mod;
x=x*x%mod;
y>>=1;
}
return ans;
}
inline void MOD(ll &x){x=x>=mod?x-mod:x;}
inline ll C(ll n){return n*(n-1)/2%mod;}
inline void solve(int l,int r,int k){
if(k==1||l==r){tong[r-l+1]++;return;}
int mid=(l+r)>>1;
solve(l,mid,k-1);solve(mid+1,r,k-1);
}
inline ll calc(int a,int b){
ll ans=1ll*a*b%mod*inv[2]%mod;
for(int i=1;i<=a;++i)MOD(ans=ans-(sum[i+b]-sum[i])+mod);
return ans;
}
int main(){
n=rd();k=rd();mod=rd();
for(int i=1;i<=n;++i)inv[i]=power(i,mod-2),MOD(sum[i]=sum[i-1]+inv[i]);
solve(1,n,k);
for(it1=tong.begin();it1!=tong.end();++it1){
MOD(ans+=C(it1->first)*inv[2]%mod*it1->second%mod);
MOD(ans+=C(it1->second)*calc(it1->first,it1->first)%mod);
}
for(it1=tong.begin();it1!=tong.end();++it1)
for(it2=tong.begin();it2!=tong.end();++it2){
if(it1->first<=it2->first)break;
MOD(ans+=1ll*it1->second*it2->second%mod*calc(it1->first,it2->first)%mod);
}
cout<<ans;
return 0;
}
CF1081G Mergesort Strikes Back的更多相关文章
- codeforces1081G Mergesort Strikes Back【期望dp+脑洞】
首先看这样做的特点,就是分到最后小块里的点合并上去的时候相对顺序不变,所以先加上块内逆序对的期望 合并的时候一定是一边卡住一个大值,另一边跳指针,所以把一个值向右直到有大于它的值位置的一段区间看作一段 ...
- ZJOI2019Round#2
乱听课记录 关于树的分治问题&杂题选讲 张哲宇 边分治 (边分不是很鸡肋吗) 例题一 题目大意:给出两颗有正负边权的树,求出两个点\(u,v\)使得两棵树中\((u,v)\)距离的和最大. ...
- 一句话CF
目录 \(\bf {Round \ \#500 \ (Div. \ 1)}\) \(\bf {Round \ \#589 \ (Div. \ 2)}\) \(\bf {Avito \ Cool \ C ...
- PTA Iterative Mergesort
How would you implement mergesort without using recursion? The idea of iterative mergesort is to sta ...
- 算法實例-C#-歸併排序-MergeSort
# 算法实例 # 排序算法Sort 歸併排序MergeSort 算法說明 歸併的思路是任意兩個元素可以比較大小,那麼任意兩個有序的元素集合也可以通過比較大小的方式歸併成一個有序的元素集合 任何的無序元 ...
- MergeSort(归并排序)算法Java实现
归并排序 归并排序 (merge sort) 是一类与插入排序.交换排序.选择排序不同的另一种排序方法.归并的含义是将两个或两个以上的有序表合并成一个新的有序表.归并排序有多路归并排序.两路归并排序 ...
- SGU 319. Kalevich Strikes Back (线段树)
319. Kalevich Strikes Back Time limit per test: 0.5 second(s)Memory limit: 65536 kilobytes input: st ...
- ural 1221. Malevich Strikes Back!
1221. Malevich Strikes Back! Time limit: 1.0 secondMemory limit: 64 MB After the greatest success of ...
- mergeSort
package POJ; public class Main { /** * * MergeSort * */ public static void main(String[] args) { Mai ...
随机推荐
- License开源许可证
- C#银行卡号每隔4位数字加一个空格
1.填写银行卡号每隔4位数字加一个空格 Regex.Replace(dic["BankCardNo"].ToString(), @"(\d{4}(?!$))", ...
- 20191127 Spring Boot官方文档学习(4.25)
4.25. Testing Spring Boot提供了许多实用程序和注解,可以在测试应用程序时提供帮助.测试支持由两个模块提供:spring-boot-test包含核心项,spring-boot-t ...
- 主机(windows10)虚拟机(ubuntu18)arm板(linux3.4)相互ping通
实际中在主机上安装虚拟机,并在主机上通过网线连接arm板进行调试. 用网线将主机和arm板直接物理连接,且主机和arm必须处于同一个网段.(我们知道主机中的网卡具有路由器的功能) 其中arm板IP地址 ...
- Linux如何设置在当前目录下打开终端
转:https://blog.csdn.net/iot_flower/article/details/71189816 1. sudo apt-get install nautilus-open-te ...
- nginx下载安装和虚拟机的配置
一. Nginx下载安装 1.Nginx下载:nginx-1.13.0.tar.gz,下载到:/usr/local/software/ wget http://nginx.org/download/n ...
- windows套接字阻塞模式编程实例
一.阻塞模式套接字服务端和客户端的运行流程如下: 1.1 服务器运行过程如下: 1.服务器启动后,等待客户端的连接请求.2.当收到客户端的请求后,在界面上显示该客户端的IP地址和端口,以及“Hello ...
- Django rest_frameword 之项目流程
后端开发软件目录规范 一.Model from django.db import models # Create your models here. # 多表的设计 # 图书 作者 出版社 作者详情表 ...
- Quartus 中调用modelsim的流程及*.vt或*.vht自动生成
一.自动生成验证程序testbench的方法,setting-EDA Tool->simylation->选择对应的语言(verilog对应*.vt,VHDL对应*.vht)process ...
- Django发送邮件功能
以126邮箱为例 1 首先进126邮箱设置,开启: POP3/SMTP服务 IMAP/SMTP服务 成功开启后会获得一个授权码. 2. setting.py配置: # 配置发送邮箱 # 需要登录网 ...