This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int> pi;
#define f first
#define s second
#define FAST ios_base::sync_with_stdio(0); cin.tie(0);
#define all(x) x.begin(),x.end()
const int maxn = 300010;
const int mod = 1e9+7;
int n;
int ft[maxn];
int fac[maxn];
vector <int> disc(vector <int> V) {
vector <int> dis = V;
sort(dis.begin(),dis.end());
dis.resize(unique(dis.begin(),dis.end()) - dis.begin());
for (int i =0;i<(int)V.size();i++) {
V[i] = lower_bound(dis.begin(),dis.end(),V[i]) - dis.begin() + 1;
}
return V;
}
int ls(int x) {
return x & (-x);
}
void up(int x, int v) {
for (;x <= n; x += ls(x)) ft[x] += v;
}
int query(int x) {
int res = 0;
for (; x; x -= ls(x)) res += ft[x];
return res;
}
void add(int &a, int b) {
a += b;
a %= mod;
}
int32_t main() {
FAST
cin >> n;
vector <int> v(n);
fac[0] = 1;
for (int i =1;i<=n;i++) {
fac[i] = (fac[i-1] * i) % mod;
}
for (int i =0;i<n;i++) {
cin >> v[i];
}
v = disc(v);
//cout << "HELLO\n";
//for (int i =1;i<=n;i++) {
//cout << v[i-1] << "\n";
//}
int ans = 0;
for (int i =1;i<=n;i++) {
int x = v[i-1];
int taken = query(x-1);
if (x-taken-1 > 0) {
//cout << x << " " << taken << " " << fac[n-i] << "\n";
int res = ((x - taken - 1) * fac[n-i] % mod)%mod;
add(ans,res%mod);
}
up(x,1);
}
cout << (ans+1)%mod;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |