3.20 关于int与ll
1.如果一道题时间充足,把全部变量定义成long long
2.特别注意最上面宏定义的变量类型,特别是FOR
3.如果是int,用1LL* ......
**实例,让我崩溃
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define rg register 4 typedef long long ll; 5 #define gmax(a,b) a=max(a,b) 6 #define gmin(a,b) a=min(a,b)
1 #define FOR(i,a,b) for(rg int i=a;i<=b;++i) 2 #define For(i,a,b) for(rg int i=a;i>=b;--i)
1 #define gc pa==pb&&(pb=(pa=buf)+fread(buf,1,100000,stdin),pa==pb)?EOF:*pa++ 2 static char buf[100000],*pa(buf),*pb(buf); 3 inline int rd() 4 { 5 rg int x(0),w(1); 6 rg char c(gc); 7 while(c<'0' || c>'9') 8 { 9 if(c=='-') w=-1; 10 c=gc; 11 } 12 while(c>='0' && c<='9') x=x*10+c-48,c=gc; 13 return x*w; 14 } 15 16 const int N=1000005; 17 const ll MOD=998244353,ny=499122177; 18 ll f[N],g[N],tn[N],jc[N]; 19 int c[N],a[N],n; 20 ll ans; 21 22 void add(int x,int y) 23 { 24 for(;x<=n;x+=x&(-x)) c[x]+=y; 25 } 26 27 ll ask(int x) 28 { 29 ll res=0; 30 for(;x;x-=x&(-x)) res+=c[x]; 31 return res; 32 } 33 34 int main() 35 { 36 freopen("sort.in","r",stdin); 37 freopen("sort.out","w",stdout); 38 n=rd();FOR(i,1,n) a[i]=rd(); 39 jc[0]=1;FOR(i,1,n) jc[i]=(i*jc[i-1])%MOD;
1 FOR(i,2,n) f[i]=((i*f[i-1])%MOD+(1LL*i*(i-1)/2)%MOD*jc[i-1]%MOD)%MOD;
1 tn[1]=1;add(a[n],1); 2 FOR(i,2,n) 3 g[i]=ask(a[n-i+1]),add(a[n-i+1],1), 4 tn[i]=((g[i]*jc[i-1])%MOD+tn[i-1])%MOD; 5 FOR(i,1,n) ans=(ans+g[i]*f[i-1]%MOD+g[i]*(g[i]-1)%MOD*ny%MOD*jc[i-1]%MOD+g[i]*tn[i-1]%MOD)%MOD; 6 cout<<ans; 7 return 0; 8 }