求调刚才ABC的F,孩子差点场切F,想哭
  • 板块学术版
  • 楼主wtcqwq
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/11/5 21:54
  • 上次更新2023/10/27 04:08:22
查看原帖
求调刚才ABC的F,孩子差点场切F,想哭
241867
wtcqwq楼主2022/11/5 21:54
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=200009;
ll T,n,tr[N],tr2[N],a[N];
ll LSB(ll x){
	return x&(-x);
}
void add(ll u,ll delta){
	while(u<N){
		tr[u]+=delta;
		tr[u]%=998244353;
		u+=LSB(u);
	}
}
void add2(ll u,ll delta){
	while(u<N){
		tr2[u]+=delta;
		tr2[u]%=998244353;
		u+=LSB(u);
	}
}
ll query(ll u){
	ll ans=0;
	while(u){
		ans+=tr[u];
		ans%=998244353;
		u-=LSB(u);
	}
	return ans;
}
ll query2(ll u){
	ll ans=0;
	while(u){
		ans+=tr2[u];
		ans%=998244353;
		u-=LSB(u);
	}
	return ans;
}
ll qpow(ll a,ll b,ll mod){
	ll ans=1;
	while(b){
		if(b&1) ans=(ans*a)%mod;
		a=(a*a)%mod;
		b/=2;
	}
	return ans;
}
int main(){
	cin>>n;
	for(ll i=1;i<=n;i++){
		cin>>a[i];
	}
	ll ans=0;
	for(ll i=1;i<=n;i++){
		ans+=a[i];
		ans+=(query(200000)-query(a[i]))*2;
//		cout<<query(200000)-query(a[i])<<endl;
		ans%=998244353;
		ans+=query2(a[i]+1)*a[i]*2;
//		cout<<query2(a[i])<<endl;
		ans%=998244353;
//		cout<<ans<<endl;
		cout<<ans%998244353*qpow(i*i,998244351,998244353)%998244353<<endl;
		add(a[i],a[i]);
		add2(a[i],1);
	}
	return 0;
}

2022/11/5 21:54
加载中...