【学习笔记】[ARC154E] Reverse and Inversion

学好数学

首先对于位置 i i i,设 g ( i ) = ∑ j < i [ Q j > Q i ] − ∑ j > i [ Q j < Q i ] g(i)=\sum_{j<i}[Q_j>Q_i]-\sum_{j>i}[Q_j<Q_i] g(i)=j<i[Qj>Qi]j>i[Qj<Qi],有结论 g ( i ) = i − Q i g(i)=i-Q_i g(i)=iQi

道理很简单, g ( i ) = i − ∑ j ≤ i [ Q j ≤ Q i ] − ∑ j > i [ Q j ≤ Q i ] = i − Q i g(i)=i-\sum_{j\le i}[Q_j\le Q_i]-\sum_{j>i}[Q_j\le Q_i]=i-Q_i g(i)=iji[QjQi]j>i[QjQi]=iQi

那么我们只要算 i i i的期望位置就好了。显然如果 i ∉ [ l , r ] i\notin [l,r] i/[l,r]那么这次操作对 i i i没有影响,那么我们只要算出 i ∈ [ l , r ] i\in [l,r] i[l,r]时对应位置的期望即可。不难暴力算出此时 i i i的期望位置是 n + 1 2 \frac{n+1}{2} 2n+1,所以只要 i i i被操作了一次那么位置就是 n + 1 2 \frac{n+1}{2} 2n+1,否则就是原位置。

#include<bits/stdc++.h> #define fi first #define se second #define ll long long #define pb push_back #define inf 0x3f3f3f3f using namespace std; const int mod=998244353; int n,m,Q[200005]; ll f[200005],res; ll pw(ll x,ll y=mod-2){ x%=mod;ll z(1); for(;y;y>>=1){ if(y&1)z=z*x%mod; x=x*x%mod; }return z; } signed main(){ ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>n>>m;for(int i=1;i<=n;i++)cin>>Q[i],res=(res+(ll)i*i)%mod; ll X=pw((ll)n*(n+1)/2%mod); for(int i=1;i<=n;i++){ ll Y=X*i%mod*(n-i+1)%mod; res=(res-pw(1-Y,m)*i%mod*Q[i]%mod)%mod; res=(res-(1-pw(1-Y,m))*(n+1)%mod*pw(2)%mod*Q[i]%mod)%mod; }res=res*pw((ll)n*(n+1)/2,m)%mod; cout<<(res+mod)%mod; }

__EOF__

本文作者仰望星空的蚂蚁
本文链接https://www.cnblogs.com/cqbzly/p/17530048.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   仰望星空的蚂蚁  阅读(17)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示