Submission #739997

#TimeUsernameProblemLanguageResultExecution timeMemory
739997baneCryptography (NOI20_crypto)C++17
100 / 100
319 ms32340 KiB
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
#define int long long
const int MOD = (int)1e9 + 7;
template<typename T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
const int maxN = (int)1e6+1;
class Solution{

	private:
	int N, P[maxN];
	public:
	void init(){
		cin >> N;
		for(int i = 0; i < N; i++){
			cin >> P[i];
		}
	}
	
	int Solve(){
		int ans = 1;
		Tree<int>t;
		int fact[N+1];
		fact[0]=1;
		for (int i = 1; i<=N; i++){
			fact[i] = (fact[i - 1] * i)%MOD;
		}
		for (int i = N - 1; i >= 0; i--){
			t.insert(P[i]);
			int pos = t.order_of_key(P[i]);
			ans = (ans + pos * fact[N - i  - 1])%MOD;
		}
		return ans;
	}

};

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	Solution resenie;
	resenie.init();
	cout<<resenie.Solve();
	return 0;
}
#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...