逆序对分三类:

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. tomcat7 server.xml max thread

    java - Tomcat - maxThreads vs maxConnections - Stack Overflowhttps://stackoverflow.com/questions/246 ...

  2. js怎么能取得多选下拉框选中的多个值?

    方法:获取多选下拉框对象数组→循环判断option选项的selected属性(true为选中,false为未选中)→使用value属性取出选中项的值.实例演示如下: 1.HTML结构 1 2 3 4 ...

  3. vue-resources&axios

    vue-resource vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应. vue-resource特点: 体积小 vue-re ...

  4. postgreSQL使用杂谈

    由于当时是在美国安装的postgreSQL ,导致回到上海后使用时,发现时间数据显示不正确. To acomplish the timezone change in Postgres 9.6 you ...

  5. vue-router路由懒加载(解决vue项目首次加载慢)

    懒加载:----------------------------------------------------? 也叫延迟加载,即在需要的时候进行加载,随用随载. 为什么需要懒加载? 像vue这种单 ...

  6. Android——MaterialDesign之二DrawerLayout

    滑动菜单--DrawerLayout 滑动菜单就是把一些菜单选项隐藏起来,而不是放置主屏幕中,然后可以通过滑动的方式将菜单显示出来,具有非常的画面效果,就是类似侧边滑动. 例子:需要上一次的Toolb ...

  7. ArcGIS中使用异步回调函数查询图层Graphic

    在我们的地图的操作中经常会有一些操作是需要通过画多边形或者画线来查找某一块区域内的特定的Graphics比如我们在做的交警的项目中通过框选来查找某一块区域中的摄像机,某一块区域中的警力.警情.警员等相 ...

  8. 利用 ajax自定义Form表单的提交方式

    需求场景:有时候单纯的form表单无法向后端传递额外的参数 比如需要action传递js异步生成的参数 ,form表单默认的action就无法满足需求,这时就需要我们自定义form表单的提交方式. h ...

  9. 启动docker容器 防火墙问题报错 ! -i docker0' failed: iptables: No chain/target/match by that name.

    COMMAND_FAILED: '/sbin/iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 8111 -j DNAT --to-destination ...

  10. SOJ 1685:chopsticks(dp)

    题目链接 说实话挺喜欢soj的界面,简简单单,没有多余的东西hhh(但是简单到连内存限制,时间限制都看不到了. 题意是有个“奇葩”的主人公,吃饭要用三根筷子.两根短的一根长的. 现在给你n根筷子,要在 ...