「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 ...
随机推荐
- java并发编程工具类JUC第四篇:LinkedBlockingQueue链表队列
在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口.ArrayBlockingQueue.DelayQueue. LinkedBlockingQueue 队列是Blo ...
- Python Xpath语法
Python Xpath语法 一.选取节点 常用的路劲表达式: 表达式 描述 实例 nodename 选取nodename节点的所有子节点 xpath('//div') 选取了div节点 ...
- AIFramework框架Jittor特性(上)
AIFramework框架Jittor特性(上)
- YOLOV4知识点分析(二)
YOLOV4知识点分析(二) 6. 数据增强相关-mixup 论文名称:mixup: BEYOND EMPIRICAL RISK MINIMIZATION 论文地址:https://arxiv.org ...
- Json文件解析(下)
Json文件解析(下) 代码地址:https://github.com/nlohmann/json 从STL容器转换 任何序列容器(std::array,std::vector,std::dequ ...
- 错误档案1:Eclipse自动生成swing窗体代码报错
目录 前言 错误信息 解决方法 结论 前言 大家好呀,我是 白墨,一个热爱学习与划水的矛盾体. 昨天为了图方便,使用MyEclipse中的swing功能画界面,画完以后发现无法运行,查看源代码发现全报 ...
- 【NX二次开发】基准特征
创建基准特征UF_MODL_create_fixed_daxis 创建一个固定的基准轴特征,方向由点1指向点2UF_MODL_create_fixed_dplane 创建一个固定的基准面特征,输入点和 ...
- 【SQLite】教程08-SQLite可视化工具
推荐使用"SQLiteStudio" 下载地址:http://www.downza.cn/soft/208363.html 设为中文的方法: 最后重启软件即可!
- Typora 配置码云图床
目录 在码云创建一个项目作为自己床图 设置私人令牌 下载安装 PigGo Typora中设置图片上传选项 在码云创建一个项目作为自己床图 创建的项目必须为公开项目,创建的过程不细说了. 设置私人令牌 ...
- excel函数提取身份证出生日期,分离日期时间的日期和时间
1.提取身份证出生日期 =1*TEXT(MID(H13,7,8),"0-00-00")用MID函数提取表示日期的位数,再用text函数转换为格式1998-6-21格式的文本,再通过 ...