首页 > 其他分享 >CF746 期望+逆序对

CF746 期望+逆序对

时间:2024-03-30 13:11:18浏览次数:18  
标签:cnt 期望 int dfrac sum times CF746 逆序

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} \]

因此

\[\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 \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;
}

标签:cnt,期望,int,dfrac,sum,times,CF746,逆序
From: https://www.cnblogs.com/Luxinze/p/18105363

相关文章

  • 字符串逆序
    文章目录一、字符串?二、思路三、运行代码 一、字符串?在C语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。二、思路从左++和右--到中间。赋值最左边和最右边给指针left、right,然后通过left++、right--进行逆序。......
  • Copula估计边缘分布模拟收益率计算投资组合风险价值VaR与期望损失ES|附代码数据
    全文链接:http://tecdat.cn/?p=24753最近我们被客户要求撰写关于风险价值的研究报告,包括一些图形和统计输出。在这项工作中,我通过创建一个包含四只基金的模型来探索copula,这些基金跟踪股票、债券、美元和商品的市场指数摘要然后,我使用该模型生成模拟值,并使用实际收益和模拟收......
  • Copula估计边缘分布模拟收益率计算投资组合风险价值VaR与期望损失ES|附代码数据
    全文链接:http://tecdat.cn/?p=24753最近我们被客户要求撰写关于风险价值的研究报告,包括一些图形和统计输出。在这项工作中,我通过创建一个包含四只基金的模型来探索copula,这些基金跟踪股票、债券、美元和商品的市场指数摘要然后,我使用该模型生成模拟值,并使用实际收益和模拟收......
  • 【2024-03-19】期望失调
    20:00只要活着,我们所有人都持有改变的能力,甚至是发生根本性改变的能力。                                                 ——卡伦·霍妮昨晚小区又停水了,没有通知也......
  • 概率期望进阶 + Min-Max容斥 练习题
    Luogu5644[PKUWC2018]猎人杀link题意:有\(n\)个人,每次在剩下的人中选择一个人杀死,选择\(i\)的概率为\(\dfrac{w_i}{\sum_jw_j}\),求第\(1\)个人是最后一个杀死的概率,答案对\(998244353\)取模。\(w_i\ge1,\space\sum\limits_{i=1}^nw_i\le10^5\)考虑容斥,枚举钦定......
  • 专题 | 二分&0/1分数规划&数学期望
    二分二分编号对于一个有单调性的数组,我们可以二分编号,如果a[mid]<ans,那么mid就往a[]更大的那边走while(r>l){mid=(l+r)/2;if(judge(mid))l=mid;elser=mid;}注意二分代码的写法细节和你的check函数有关!(其实是和你在对于恰好满足要求时check返回值有......
  • 谢老师2024春 - Day2:期望DP
    Day2:期望DP​​A-CF148DBagofmice设\(dp_{i,j}\)表示还剩下\(i\)只白鼠,\(j\)只黑鼠A的胜率。大家都没有拿到白鼠,那么B赢,\(dp_{0,0}=0\)​。没有白鼠了,那么B赢,\(dp_{0,j}=0\)。全是白鼠了,那么A赢(A先抓),\(dp_{i,0}=1\)​。然后转移,有这几种情况:第一次就......
  • 随机逆序对 题解
    题意给定$1\simn$的排列$a_{1...n}$。在上面进行依次如下操作:首先在$[1,n]$​中选取一个子序列(可以为空);然后将这个子序列内的数重新排列。两个操作不同,当且仅当选取的子序列不同或者重新排列的方式不同。对于所有不同的操作,求他们产生的排列的逆序对个数和,答案......
  • 2024 年春节集训 _ 第一课 - 期望类型动态规划
    可能会用到的记号:\([P]=\begin{cases}1&(P成立)\\0&(P不成立)\end{cases}\)期望概率\(\texttt{dp}\)\(\texttt{dp}\)的变形当中最为简单易懂但是又思路又最为清奇。与之相关的难题数不胜数。考场上可以想出正解的都是超级神仙。粗浅的提一句,离散变量,也......
  • 概率与期望
    继数论和组合之后的第三大数学巨坑,高中数学必修and选修联合起来!基本概念和符号表述该部分可参考必修二(人教版)最后一章,本质上是使用集合描述概率随机事件:满足下列条件的现象可以在相同的条件下重复进行实验结果不止一个,且所有结果可以事先预知实验前不确定出现什么结果......