Link

题意:给定一个 \(1\) 到 \(n\) 的排列,等概率选一段区间 \([l, r]\) 随机排序,求期望逆序对数。

\[E =
\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,啪的一下很快啊

\[E_i = \dfrac{i \times (i - 1)}{4}
\]

proof:

随机排序后,下标 \(i\),\(j\) 有 \(\dfrac{1}{2}\) 的概率构成逆序对,所以总期望为 \((i, j)\) 对数乘 \(\dfrac{1}{2}\)。

因此

\[\begin{aligned}
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 期望+逆序对的更多相关文章

  1. 计数 luogu 4223 期望逆序对

    https://www.luogu.org/problemnew/show/P4223 期望乘以\(\binom {n}{2}^k\)变成了计数问题 我们考虑每一组数\((A, B)\)产生的贡献CC ...

  2. BZOJ5058 期望逆序对 【矩乘 + 组合数学 + 树状数组】

    题目链接 BZOJ5058 题解 可以发现任意两个位置\(A,B\)最终位置关系的概率是相等的 如果数列是这样: CCCCACCCCBCCCC 那么最终有\(7\)种位置关系 \((A,B)\) \( ...

  3. Wannafly Camp 2020 Day 1A 期望逆序对 - 概率期望

    分类讨论即可 #include <bits/stdc++.h> using namespace std; #define int long long const int N = 5005; ...

  4. 逆序对 inversion

      评测传送门 [问题描述] 有一个1 − n的排列,你会依次进行m次操作,第i次操作表示为(x i , y i ),交换以这两个 值为下标的元素,每次操作有一半的概率成功,你需要求出最后序列的逆序对 ...

  5. Codeforces 351B Jeff and Furik:概率 + 逆序对【结论题 or dp】

    题目链接:http://codeforces.com/problemset/problem/351/B 题意: 给你一个1到n的排列a[i]. Jeff和Furik轮流操作,Jeff先手. Jeff每 ...

  6. 【CQOI2011】动态逆序对 BZOJ3295

    Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...

  7. CH Round #72 奇数码问题[逆序对 观察]

    描述 你一定玩过八数码游戏,它实际上是在一个3*3的网格中进行的,1个空格和1~8这8个数字恰好不重不漏地分布在这3*3的网格中. 例如:5 2 81 3 _4 6 7 在游戏过程中,可以把空格与其上 ...

  8. POJ3928Ping pong[树状数组 仿逆序对]

    Ping pong Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3109   Accepted: 1148 Descrip ...

  9. NOIP2013火柴排队[逆序对]

    题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...

  10. bzoj 3295 动态逆序对 CDQ分支

    容易看出ans[i]=ans[i-1]-q[i],q[i]为删去第i个数减少的逆序对. 先用树状数组算出最开始的逆序对,预处理出每个数前边比它大的和后边比它小的,就求出了q[i]的初始值. 设b[i] ...

随机推荐

  1. Word文档最后一页空白页中换行符无法删除

    Word文档最后一页空白页中换行符无法删除 问题如题: 尝试了delete.backspace.backspace+delete都不行. 找到了这个方法: 选中最后一页的换行符,然后段落--间距--行 ...

  2. FBNet/FBNetV2/FBNetV3:Facebook在NAS领域的轻量级网络探索 | 轻量级网络

    FBNet系列是完全基于NAS方法的轻量级网络系列,分析当前搜索方法的缺点,逐步增加创新性改进,FBNet结合了DNAS和资源约束,FBNetV2加入了channel和输入分辨率的搜索,FBNetV3 ...

  3. KingbaseES V8R6运维案例之---wal日志解析DML操作

    案例说明: 通过sys_waldump解析DML操作,获取DML操作的日志条目具体内容. 适用版本: KingbaseES V8R3/R6 一.DML事务操作对应的wal日志文件 # 查看当前onli ...

  4. CI和自动化测试的结合(jenkins的搭建和使用)

    CI持续集成是一种思想,具体实现是通过jenkins持续集成工具去实现的. Jenkins的安装和配置(war包启动) 安装jenkins的方式有两种: 方式一:通过下载安装包安装,jenkins.m ...

  5. 使用fiddler抓取HTTPS的数据包(抓取App端的数据包)

    众所周知,我们在做接口测试的时候有两种情况: 第一种是先拿到接口测试规范文档,再去做接口测试. 第二种是没有接口文档,只有通过自己抓包. 那么说到抓包,就不得不说抓包工具,对于浏览器web端,我们只需 ...

  6. 提升系统管理:监控和可观察性在DevOps中的作用

    在不断发展的DevOps世界中,深入了解系统行为.诊断问题和提高整体性能的能力是首要任务之一.监控和可观察性是促进这一过程的两个关键概念,为系统的健康和性能提供了宝贵的可见性.虽然这些术语经常可以互换 ...

  7. #线段树#洛谷 4340 [SHOI2016]随机序列

    题目 分析 可以发现加号和减号会抵消掉,真正有用的答案就是第一段的乘积. 那也就是 \(\sum_{i=1}^nS_i*2*3^{n-i-1}\),其中 \(S_i\) 表示 \(a_1\) 到 \( ...

  8. #期望dp#51nod 2015 诺德街

    题目传送门 分析 禁不住 QuantAsk 的诱惑(bushi) 考虑一条路线可以由若干段 \(1-2-\dots-n-\dots-2\) 以及 最后一段 \(1-\dots-x\) 组成. 对于最后 ...

  9. 使用OHOS SDK构建libjpeg-turbo

    参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/libjpeg-turb ...

  10. 小师妹学JavaIO之:try with和它的底层原理

    目录 简介 IO关闭的问题 使用try with resource try with resource的原理 自定义resource 总结 简介 小师妹是个java初学者,最近正在学习使用java I ...