#include<bits/stdc++.h>
using namespace std;
//#pragma GCC optimize(2)
#define endl '\n'
#define lowbit(x) ((x)&-(x))
const int N=2e6+10;
const int mod =998244353;
typedef long long ll;
ll ans=0,n1,m1;
ll t=0,s1=0,s2=0,s3=0,s4=0,max1=0,max2=0,w,min1=100000000,sum=0,n,m,i,j,k,v,l,r;
inline int read() {
bool sym=0;
int res=0;
char ch=getchar();
while(!isdigit(ch))sym |=(ch =='-'),ch=getchar();
while(isdigit(ch)) res =(res<<3)+(res<<1)+(ch^48),ch=getchar();
return sym ? -res : res;
}
void print(int x) {
if(!x)return;
print(x/10);
putchar(x%10+'0');
}
int isPrime(int n)
{
float n_sqrt;
if(n==1) return 0;
if(n==2 || n==3) return 1;
if(n%6!=1 && n%6!=5) return 0;
n_sqrt=floor(sqrt((float)n));
for(int i=5;i<=n_sqrt;i+=6)
{
if(n%(i)==0 | n%(i+2)==0) return 0;
}
return 1;
}
ll a[1000007]={1,1};
ll jj[1400000];
ll tree[1000007];
void update(ll x,ll d){
for(ll i=x;i<=n;i+=lowbit(i)){
tree[i]+=d;
}
}
ll summ(ll x){
ll ans=0;
for(ll i=x;i>0;i-=lowbit(i))
ans+=tree[i];
return ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(i=1;i<=n;i++)
{
a[i]=(a[i-1]*i)%mod;
update(i,1);
}
for(i=1;i<=n;i++){
cin>>jj[i];
ans=(ans+((summ(jj[i])-1)*a[n-i])%mod)%mod;
update(jj[i],-1);
}
cout<<ans+1;
return 0;
}
//mio lover
康托展开 洛谷 P5367
最新推荐文章于 2024-10-15 19:28:18 发布
该C++代码实现了一个程序,用于计算斐波那契数列,并使用低bit技巧更新树状数组,同时包含一个判断质数的函数。程序读入整数n和一系列索引,计算并输出特定索引处斐波那契数的累积和,涉及数组操作和模运算优化。
摘要由CSDN通过智能技术生成