逆序对分三类:

1.已知对已知

树状数组直接处理即可

2.未知对未知

设未知数的位置数为\(m\),则有\(m(m-1)/2\)个数对。一个数对是逆序对的期望是\(0.5\)(一个逆序对与一个非逆序对对应)。因为期望的可加性,总期望为\(m(m-1)/4\)

3.已知对未知

处理出对于每个数\(i\),比它大且可填入原序列的数的个数\(a_i\)和比它小且可填入原序列的数的个数\(b_i\)

如果未知数在已知数\(i\)的左边,期望为\(a_i/m\),否则为\(b_i/m\),全加起来就行了

代码:

#include <bits/stdc++.h>
#define mod 998244353ll
#define ll long long
#define rep(i,x,y) for(i=x;i<=y;++i)
#define des(i,x,y) for(i=x;i>=y;--i)
#define rd(x) scanf("%d",&x)
#define N 200005
using namespace std;

int a[N],bg[N],sm[N],n;
ll c[N],t[N];
bool vis[N];

inline ll ksm(ll x,ll y){
    ll z=1;
    while(y){
        if(y&1) (z*=x)%=mod;
        (x*=x)%=mod,y>>=1;
    }
    return z;
}
inline int lowbit(int x){ return x&(-x);}
inline void add(ll *a,int x,int y){
    for(int i=x;i<=n;i+=lowbit(i)) (a[i]+=y)%=mod;
}
inline ll query(ll *a,int x){
    ll tmp=0;
    for(int i=x;i>0;i-=lowbit(i))
        (tmp+=a[i])%=mod;
    return tmp;
}

int main(){
    int i,tot=0;
    ll ans=0,inv;
    rd(n);
    rep(i,1,n){
        rd(a[i]);
        if(a[i]==-1) tot++;
        else vis[a[i]]=1;
    }
    inv=ksm(1ll*tot,mod-2);
    (ans+=1ll*tot*(tot-1)%mod*ksm(4ll,mod-2)%mod)%=mod;
    bg[n]=0,sm[1]=0;
    des(i,n-1,1) bg[i]=bg[i+1]+(!vis[i+1]);
    rep(i,2,n) sm[i]=sm[i-1]+(!vis[i-1]);
    rep(i,1,n){
        if(~a[i]) add(c,a[i],sm[a[i]]*inv%mod);
        else (ans+=query(c,n))%=mod;
    }
    memset(c,0,sizeof(c));
    des(i,n,1){
        if(~a[i]){
            (ans+=query(t,a[i]))%=mod;
            add(t,a[i],1),add(c,a[i],bg[a[i]]*inv%mod);
        } else (ans+=query(c,n))%=mod;
    }
    printf("%I64d",ans);
}

CF1096F Inversion Expectation的更多相关文章

  1. CF1096.F. Inversion Expectation(树状数组)

    A permutation of size n is an array of size n such that each integer from 1 to n occurs exactly once ...

  2. Codeforces Educational Codeforces Round 57 题解

    传送门 Div 2的比赛,前四题还有那么多人过,应该是SB题,就不讲了. 这场比赛一堆计数题,很舒服.(虽然我没打) E. The Top Scorer 其实这题也不难,不知道为什么这么少人过. 考虑 ...

  3. Educational Codeforces Round 57题解

    A.Find Divisible 沙比题 显然l和2*l可以直接满足条件. 代码 #include<iostream> #include<cctype> #include< ...

  4. Codeforces Educational Round 57

    这场出题人好像特别喜欢998244353,每个题里都放一个 A.Find Divisible 考察选手对输入输出的掌握 输出l 2*l即可(为啥你要放这个题,凑字数吗 #include<cstd ...

  5. Educational Codeforces Round 57 Solution

    A. Find Divisible 签到. #include <bits/stdc++.h> using namespace std; int t, l, r; int main() { ...

  6. Educational Codeforces Round 57 (Rated for Div. 2) ABCDEF题解

    题目总链接:https://codeforces.com/contest/1096 A. Find Divisible 题意: 给出l,r,在[l,r]里面找两个数x,y,使得y%x==0,保证有解. ...

  7. 数据结构作业——expectation(树形dp+dfs)

    expectation Description 给出一棵带权值的树,我们假设从某个节点出发,到目标节点的时间为两个节点之间的最短路.由于出发节点不好选取,所以选在每个节点都有一定的概率,现在我们要求从 ...

  8. HDU 1394 Minimum Inversion Number ( 树状数组求逆序数 )

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 Minimum Inversion Number                         ...

  9. 控制反转Inversion of Control (IoC) 与 依赖注入Dependency Injection (DI)

    控制反转和依赖注入 控制反转和依赖注入是两个密不可分的方法用来分离你应用程序中的依赖性.控制反转Inversion of Control (IoC) 意味着一个对象不会新创建一个对象并依赖着它来完成工 ...

随机推荐

  1. centos 检测aufs 并安装

    http://www.cnblogs.com/logo-fox/p/7366506.html 因为DeviceMapper不稳定,所以必须升级到3.10以上的内核,运行docker(2.6提示运行do ...

  2. npm的nrm命令使用--设置镜像地址

    npm下载会很慢,因为npm默认从国外下载资源,建议修改npm镜像源地址 1.运行npm i nrm -g全局安装nrm包: 2.使用nrm ls查看当前所有可用的镜像源地址以及当前所使用的镜像源地址 ...

  3. bootstrap模态框关闭后清除模态框的数据

    https://segmentfault.com/q/1010000008789123 bootstrap模态框第二次打开时如何清除之前的数据? 我用了bootstrap模态框的remote功能,在弹 ...

  4. Sublime Text3配置

    { "default_encoding": "UTF-8", "font_size": 16.0, "tab_size" ...

  5. python学习笔记(11)--测验3: Python基础语法(下) (第7周)

    斐波那契数列计算 B 描述 斐波那契数列如下: F(0) = 0, F(1) = 1 F(n) = F(n-1) + F(n-2) 编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波 ...

  6. github & markdown & collapse & table

    github & markdown collapse & table https://github.com/Microsoft/TypeScript/issues/30034 GitH ...

  7. IWMS后台上传文章,嵌入音频文件代码

    <object width="260" height="69" classid="clsid:6bf52a52-394a-11d3-b153-0 ...

  8. ECS配置lamp环境

    1.安装apache 1.1 安装apache [root@nmserver-7 ~]# yum install httpd httpd-devel 1.2 启动apache服务 [root@nmse ...

  9. 使用电脑adb给Essential Phone刷机 —(官方篇)

    用ADB给Essential Phone线刷升级 重要:请确保在刷机前已经解锁,关于解锁教程群里有! 准备 原版boot Twrp boot Magisk卡刷包 到官网下载OTA包 准备好Essent ...

  10. jedis单机版应用

    1.pom文件添加依赖: 2.创建配置文件 创建单机版redisClient 代码: package com.skymall.rest.dao.imp; import org.springframew ...