「AGC030D」Inversion Sum
「AGC030D」Inversion Sum
妙啊。
由于逆序对的个数最多只有 \(O(n^2)\) 对,而对于每一个询问与其相关的逆序对数也最多只有 \(O(n)\) 对,我们可以对于每一对数分别考虑其贡献。
然后你发现直接算所有情况的和非常麻烦,所以我们可以先算出所有情况的期望逆序对数,即每一对为逆序对的概率之和,然后乘上 \(2^q\)。
那这就非常 easy 了。
就每次对于有关联的两对取一个平均值就完事了。
/*---Author:HenryHuang---*/
/*---Never Settle---*/
#include<bits/stdc++.h>
using namespace std;
const int p=1e9+7;
const int inv2=(p+1)/2;
const int maxn=3e3+5;
int a[maxn];
int f[maxn][maxn];
int ksm(int a,int b,int p){
int ans=1;
while(b){
if(b&1) ans=1ll*ans*a%p;
b>>=1,a=1ll*a*a%p;
}
return ans;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n,q;cin>>n>>q;
for(int i=1;i<=n;++i) cin>>a[i];
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
f[i][j]=a[i]>a[j];
for(int _=1;_<=q;++_){
int x,y;
cin>>x>>y;f[x][y]=f[y][x]=1ll*inv2*(f[x][y]+f[y][x])%p;
for(int i=1;i<=n;++i){
if(i==x||i==y) continue;
f[x][i]=f[y][i]=1ll*inv2*(f[x][i]+f[y][i])%p;
f[i][y]=f[i][x]=1ll*inv2*(f[i][y]+f[i][x])%p;
}
}
int ans=0;
for(int i=1;i<=n;++i)
for(int j=i+1;j<=n;++j)
ans=(ans+f[i][j])%p;
cout<<1ll*ans*ksm(2,q,p)%p<<'\n';
return 0;
}
「AGC030D」Inversion Sum的更多相关文章
- 【AGC030D】Inversion Sum DP
题目大意 有一个序列 \(a_1,a_2,\ldots,a_n\),有 \(q\) 次操作,每次操作给你两个数 \(x,y\),你可以交换 \(a_x,a_y\),或者什么都不做. 问你所有 \(2^ ...
- 「LeetCode」0001-Two Sum(Ruby)
题意与分析 题意直接给出来了:给定一个数,返回数组中和为该数(下为\(x\))的两个数的下标. 这里有一个显然的\(O(n)\)的实现:建立一个hash表,每次读入数(记作\(p\))的时候查询has ...
- 「CF622F」The Sum of the k-th Powers「拉格朗日插值」
题意 求\(\sum_{i=1}^n i^k\),\(n \leq 10^9,k \leq 10^6\) 题解 观察可得答案是一个\(k+1\)次多项式,我们找\(k+2\)个值带进去然后拉格朗日插值 ...
- Loj #3096. 「SNOI2019」数论
Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...
- Loj #3089. 「BJOI2019」奥术神杖
Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...
- Loj #2542. 「PKUWC2018」随机游走
Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...
- 「NOI2013」树的计数 解题报告
「NOI2013」树的计数 这什么神题 考虑对bfs重新编号为1,2,3...n,然后重新搞一下dfs序 设dfs序为\(dfn_i\),dfs序第\(i\)位对应的节点为\(pos_i\) 一个暴力 ...
- 「NOI2013」小 Q 的修炼 解题报告
「NOI2013」小 Q 的修炼 第一次完整的做出一个提答,花了半个晚上+一个上午+半个下午 总体来说太慢了 对于此题,我认为的难点是观察数据并猜测性质和读入操作 我隔一会就思考这个sb字符串读起来怎 ...
- Loj #3059. 「HNOI2019」序列
Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k ...
随机推荐
- Netty 框架学习 —— Netty 组件与设计
Channel.EventLoop 和 ChannelFuture 这一节将对 Channel.EventLoop 和 ChannelFuture 类进行讨论,它们组合在一起,可以被认为是 Netty ...
- LIN总线多从机与主机通信(控制+反馈)
概念 首先要明确以下两点: LIN 总线通信方式为主从机通信,属于异步通信 "帧头 + 数据帧"才算一完整报文 设计方案 多从机与主机通信数据流(控制+反馈)如下: 一号从机: 第 ...
- 【greys使用】阿里greys在线诊断工具
Greys是一个Java进程的异常诊断工具,可以在不停止程序的前提下,对一些问题进行检测.这个框架主要是采用Java的探针技术,可以做到动态修改java的字节码技术.前提是Jdk版本6+.(prema ...
- Go语言流程控制03--goto跳转到任意标签位置
package main import ( "fmt" "time" ) func main() { STUDYHARD: fmt.Println(" ...
- SQL Server 将两行或者多行拼接成一行数据
一个朋友,碰到一个问题. 就是查询出来的结果集,需要每隔三行.就将这三行数据以此拼接为一行显示.起初我想着用ROW_NUMBER加CASE WHEN去做,发现结果并非我预期那样. 结果如下: 由于别人 ...
- @RequestParam(required = true),@RequestParam(required = true)
今天在页面请求后台的时候遇到了一个问题,请求不到后台 页面代码 <li> <a href="javascript:void(0 ...
- 面试侃集合 | SynchronousQueue非公平模式篇
面试官:好了,你也休息了十分钟了,咱们接着往下聊聊SynchronousQueue的非公平模式吧. Hydra:好的,有了前面公平模式的基础,非公平模式理解起来就非常简单了.公平模式下,Synchro ...
- Linux分区创建、挂载
fdisk -l 这块盘是没有分区的,没有被使用. fdisk /dev/vdb 操作这块磁盘, 创建分区 格式化/dev/sdb1为ext4 mkfs -t ext4 /dev/vdb1 mkfs. ...
- ALD对照CVD淀积技术的优势
ALD对照CVD淀积技术的优势 ALD 适合制备很薄的高K金属氧化物层,对腔室的真空度要求比较高,对反应气体源及比例的要求也较高. 目前沉积速率还是比较慢,大大限制了其在工业上的推广应用,不过随着设备 ...
- CVPR2019目标检测论文看点:并域上的广义交
CVPR2019目标检测论文看点:并域上的广义交 Generalized Intersection over Union Generalized Intersection over Union: A ...