Submission #903574

#TimeUsernameProblemLanguageResultExecution timeMemory
903574pccCryptography (NOI20_crypto)C++14
14 / 100
229 ms20956 KiB
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace __gnu_pbds;
using namespace std;

#define ll long long
#define pll pair<ll,ll>
#define pii pair<int,int>
#define fs first
#define sc second
#define tlll tuple<ll,ll,ll>

tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> st;

const ll mod = 998244353;
const ll mxn = 3e5+10;
ll fac[mxn];
int arr[mxn];

inline ll mad(ll a,ll b){
	 a += b;
	 return a>=mod?a-mod:a;
}
inline ll mub(ll a,ll b){
	return mad(a,mod-b);
}

int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	fac[0] = 1;
	for(int i = 1;i<mxn;i++)fac[i] = fac[i-1]*i%mod;
	int N;
	cin>>N;
	for(int i = 1;i<=N;i++){
		cin>>arr[i];
		st.insert(arr[i]);
	}
	ll ans = 0;
	for(int i = 1;i<=N;i++){
		ans = mad(ans,fac[N-i]*st.order_of_key(arr[i])%mod);
		st.erase(arr[i]);
	}
	cout<<mad(ans,1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...