CF746 期望+逆序对
题意:给定一个 \(1\) 到 \(n\) 的排列,等概率选一段区间 \([l, r]\) 随机排序,求期望逆序对数。
\dfrac{\sum(cnt_{[1, n]} - cnt_{[l, r]} + E_{len})}{\dfrac{n \times (n + 1)}{2}}
\]
\(cnt_{[l, r]}\) 表示原序列 \([l, r]\) 内部逆序对数。
\(E_{len}\) 表示长度为 \(r - l + 1\) 的排列随机排序后的期望逆序对。
\(E_i\) 怎么求?(直接oeis,啪的一下很快啊
\]
proof:
随机排序后,下标 \(i\),\(j\) 有 \(\dfrac{1}{2}\) 的概率构成逆序对,所以总期望为 \((i, j)\) 对数乘 \(\dfrac{1}{2}\)。
因此
E =&
cnt_{[1, n]} - \dfrac{\sum cnt_{[l, r]}}{\dfrac{n \times (n + 1)}{2}} + \dfrac{\sum_{i = 1}^n (n - i + 1) \times E_i}{\dfrac{n \times (n + 1)}{2}} \\
=&
cnt_{[1, n]} - \dfrac{2\sum cnt_{[l, r]}}{n \times (n + 1)} + \dfrac{\sum_{i = 1}^n (n - i + 1) \times i \times (i - 1)}{2 \times n \times (n + 1)} \\
=&
A + \dfrac{-2B + \dfrac{C}{2}}{n \times (n + 1)}
\end{aligned}
\]
\(A\),\(C\) 都很好做。
对于 \(B\),下标为 \(j, i\) 的逆序对对 \(B\) 的贡献为包含 \([j, i]\) 的所有区间数 \(j \times (n - i + 1)\),树状数组维护 \(\sum j\) 即可。
#include<bits/stdc++.h>
#define rep(i, a, b) for(int i = (a); i <= (b); ++ i)
#define per(i, a, b) for(int i = (a); i >= (b); -- i)
using namespace std;
using ll = long long;
constexpr int N = 1e5 + 5;
struct Fenwick_Tree {
ll t[::N], n;
void init(int x) {
for(int i = 1; i <= (n = x); ++ i) {
t[i] = 0;
}
}
void add(int p, ll v = 1) {
while(p) {
t[p] += v;
p -= p & -p;
}
}
ll suf(int p) {
ll ret = 0;
while(p <= n) {
ret += t[p];
p += p & -p;
}
return ret;
}
} bit;
ll n, a[N], A, B, C;
/*
长度为n的排列的期望逆序对数为 n * (n - 1) / 4
https://oeis.org/A001809
*/
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
cin >> n, bit.init(n);
for(int i = 1; i <= n; ++ i) {
cin >> a[i];
A += bit.suf(a[i]);
bit.add(a[i]);
}
bit.init(n);
for(int i = 1; i <= n; ++ i) {
B += ll(n - i + 1) * bit.suf(a[i]);
bit.add(a[i], i);
}
B *= 2;
for(int i = 1; i <= n; ++ i) C += ll(n - i + 1) * i * (i - 1);
C /= 2;
double E = A + (double)(-B + C) / (n * (n + 1));
cout << fixed << setprecision(12) << E;
return 0;
}
CF746 期望+逆序对的更多相关文章
- 计数 luogu 4223 期望逆序对
https://www.luogu.org/problemnew/show/P4223 期望乘以\(\binom {n}{2}^k\)变成了计数问题 我们考虑每一组数\((A, B)\)产生的贡献CC ...
- BZOJ5058 期望逆序对 【矩乘 + 组合数学 + 树状数组】
题目链接 BZOJ5058 题解 可以发现任意两个位置\(A,B\)最终位置关系的概率是相等的 如果数列是这样: CCCCACCCCBCCCC 那么最终有\(7\)种位置关系 \((A,B)\) \( ...
- Wannafly Camp 2020 Day 1A 期望逆序对 - 概率期望
分类讨论即可 #include <bits/stdc++.h> using namespace std; #define int long long const int N = 5005; ...
- 逆序对 inversion
评测传送门 [问题描述] 有一个1 − n的排列,你会依次进行m次操作,第i次操作表示为(x i , y i ),交换以这两个 值为下标的元素,每次操作有一半的概率成功,你需要求出最后序列的逆序对 ...
- Codeforces 351B Jeff and Furik:概率 + 逆序对【结论题 or dp】
题目链接:http://codeforces.com/problemset/problem/351/B 题意: 给你一个1到n的排列a[i]. Jeff和Furik轮流操作,Jeff先手. Jeff每 ...
- 【CQOI2011】动态逆序对 BZOJ3295
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...
- CH Round #72 奇数码问题[逆序对 观察]
描述 你一定玩过八数码游戏,它实际上是在一个3*3的网格中进行的,1个空格和1~8这8个数字恰好不重不漏地分布在这3*3的网格中. 例如:5 2 81 3 _4 6 7 在游戏过程中,可以把空格与其上 ...
- POJ3928Ping pong[树状数组 仿逆序对]
Ping pong Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3109 Accepted: 1148 Descrip ...
- NOIP2013火柴排队[逆序对]
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- bzoj 3295 动态逆序对 CDQ分支
容易看出ans[i]=ans[i-1]-q[i],q[i]为删去第i个数减少的逆序对. 先用树状数组算出最开始的逆序对,预处理出每个数前边比它大的和后边比它小的,就求出了q[i]的初始值. 设b[i] ...
随机推荐
- Python数据库编程全指南SQLite和MySQL实践
本文分享自华为云社区<Python数据库编程全指南SQLite和MySQL实践>,作者: 柠檬味拥抱. 1. 安装必要的库 首先,我们需要安装Python的数据库驱动程序,以便与SQLit ...
- KingbaseES V8R6集群运维系列 -- 修改ssh通信为 sys_securecmdd 通信
一.适用于: 本文档使用于KingbaseES V008R006版本. 二.关于SYS_SECURECMDD: sys_securecmdd是KingbaseES集群自带的工具,集群监控.管理集群时通 ...
- python结巴分词及词频统计
1 def get_words(txt): 2 seg_list = jieba.cut(txt) 3 c = Counter() 4 for x in seg_list: 5 if len(x) & ...
- Scala 可变集合 mutable.Set
1 package chapter07 2 3 import scala.collection.mutable 4 5 object Test07_MutableSet { 6 def main(ar ...
- OpenHarmony使用ArkUI Inspector分析布局
本文转载自<#2023 盲盒+码 # OpenHarmony使用ArkUI Inspector分析布局>,作者:zhushangyuan_ OpenHarmony使用ArkUI Ins ...
- C# PropertyChanged 事件-数据绑定
在.NET平台上,数据绑定是一项令人十分愉快的技术.利用数据绑定能减少代码,简化控制逻辑. 通常,可以将某个对象的一个属性绑定到一个可视化的控件上,当属性值改变时,控件上的显示数据也随之发生变化.要实 ...
- Pyside2简单案例
代码: from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit app = QAppl ...
- 医疗BI系统如何使医疗行业完成精细化管理转型?
不久前在北京召开的全国医疗管理工作会议,确定了今年的医疗管理工作重点.会议强调,推动医疗管理改革工作的过程中要对形势.规律准确把握,积极应对可能面临的挑战,以"三个转变.三个提高" ...
- springboot 整合webservice 相关说明
1.环境依赖 jdk8, springboot 2.3.12.release,cxf版本需要根据springboot版本修改,方法:查看springboot版本的发布日期,然后根据日期找相近的两个版本 ...
- 使用EPLAN做项目的收获点
收获点如下: 1.消息检查功能. 最具有代表性的EPLAN软件的辅助检查功能.通过自带检查可以发现设计的错误和警告. 2.导线表导出功能. 使用导入模版.宏设置,导出对应线号表. 此类接线通过一个导线 ...