康托展开

贡献者:bdcdcdc 类别:代码 时间:2019-07-24 07:46:14 收藏数:1 评分:1
返回上页 举报此文章
请选择举报理由:




收藏到我的文章 改错字
#include<bits/stdc++.h>
using namespace std;
#define N 1000005
#define Mod 998244353
#define For(i,x,y)for(i=x;i<=y;i++)
#define lowbit(x)(x&-x)
int c[N],a,n;
int read()
{
int A;
bool K;
char C;
C=A=K=0;
while(C<'0'||C>'9')K|=C=='-',C=getchar();
while(C>'/'&&C<':')A=(A<<3)+(A<<1)+(C^48),C=getchar();
return(K?-A:A);
}
void add(int x)
{
while(x<=n)c[x]--,x+=lowbit(x);
}
int sum(int x)
{
int s=0;
while(x)s+=c[x],x-=lowbit(x);
return s;
}
int main()
{
int tot=0,i;
n=read();
For(i,1,n)
{
a=read();
if(i<n)tot=1LL*(tot+a+sum(a)-1)%Mod*(n-i)%Mod;
add(a);
}
cout<<tot+1;
return 0;
}
声明:以上文章均为用户自行添加,仅供打字交流使用,不代表本站观点,本站不承担任何法律责任,特此声明!如果有侵犯到您的权利,请及时联系我们删除。
文章热度:
文章难度:
文章质量:
说明:系统根据文章的热度、难度、质量自动认证,已认证的文章将参与打字排名!

本文打字排名TOP20

登录后可见

用户更多文章推荐