Submission #946383
Source Code Expand
#include <bits/stdc++.h> using namespace std; #define PB push_back #define MP make_pair #define LL long long #define int LL #define FOR(i,a,b) for(int i = (a); i <= (b); i++) #define RE(i,n) FOR(i,1,n) #define REP(i,n) FOR(i,0,(int)(n)-1) #define R(i,n) REP(i,n) #define VI vector<int> #define PII pair<int,int> #define LD long double #define FI first #define SE second #define st FI #define nd SE #define ALL(x) (x).begin(), (x).end() #define SZ(x) ((int)(x).size()) template<class C> void mini(C& _a4, C _b4) { _a4 = min(_a4, _b4); } template<class C> void maxi(C& _a4, C _b4) { _a4 = max(_a4, _b4); } template<class TH> void _dbg(const char *sdbg, TH h){ cerr<<sdbg<<'='<<h<<endl; } template<class TH, class... TA> void _dbg(const char *sdbg, TH h, TA... a) { while(*sdbg!=',')cerr<<*sdbg++;cerr<<'='<<h<<','; _dbg(sdbg+1, a...); } template<class T> ostream& operator<<(ostream& os, vector<T> V) { os << "["; for (auto& vv : V) os << vv << ","; os << "]"; return os; } #ifdef LOCAL #define debug(...) _dbg(#__VA_ARGS__, __VA_ARGS__) #else #define debug(...) (__VA_ARGS__) #define cerr if(0)cout #endif const int P = 1e9 + 7; const int MAX = 1e6; int dp[MAX]; int n; int sum(int x){ int res = 0; for(;x; x -= (x&-x)){ res += dp[x]; } return res; } void add(int x){ for(;x <= n; x += (x & -x)) dp[x] ++; } int p[MAX]; int zerd[MAX]; int md[MAX]; int sil[MAX]; int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout << fixed << setprecision(11); cerr << fixed << setprecision(6); cin >> n; sil[0] = 1; R(i,n){ sil[i+1] = sil[i] * (i+1) % P; cin >> p[i]; } int zer = 0; for(int i = n-1;i>=0;i--){ zerd[i] = zer; if(p[i] == 0){ zer++; }else{ md[i] = sum(p[i]); add(p[i]); } } int res = 0; int ss = 0; R(i,n){ int pom = 0; if(p[i] != 0){ pom += md[i] * sil[zer] % P; int wolne = p[i] - sum(p[i]); pom += wolne * sil[zer-1] % P * zerd[i] % P; res += ss * (zer - wolne) % P * sil[zer-1] % P; }else{ ss += sil[n-i-1]; ss %= P; pom = sil[zer] * zerd[i]% P * ((P+1) / 2) % P; ; } debug(pom); res += (pom % P * sil[n-i-1]) % P; debug(res); } debug(res); res += sil[zer]; // indeksowanie ?? cout << res % P << "\n"; }
Submission Info
Submission Time | |
---|---|
Task | E - Encyclopedia of Permutations |
User | Marcin |
Language | C++14 (GCC 5.4.1) |
Score | 1200 |
Code Size | 2401 Byte |
Status | AC |
Exec Time | 113 ms |
Memory | 19840 KB |
Judge Result
Set Name | Sample | Subtask | All | ||||||
---|---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 500 / 500 | 700 / 700 | ||||||
Status |
|
|
|
Set Name | Test Cases |
---|---|
Sample | 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt, 0_004.txt |
Subtask | 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt, 0_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt, 1_020.txt, 1_021.txt, 1_022.txt, 1_023.txt, 1_024.txt, 1_025.txt, 1_026.txt, 1_027.txt, 1_028.txt, 1_029.txt, 1_030.txt, 1_031.txt, 1_032.txt |
All | 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt, 0_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt, 1_020.txt, 1_021.txt, 1_022.txt, 1_023.txt, 1_024.txt, 1_025.txt, 1_026.txt, 1_027.txt, 1_028.txt, 1_029.txt, 1_030.txt, 1_031.txt, 1_032.txt, 2_033.txt, 2_034.txt, 2_035.txt, 2_036.txt, 2_037.txt, 2_038.txt, 2_039.txt, 2_040.txt, 2_041.txt, 2_042.txt, 2_043.txt, 2_044.txt, 2_045.txt, 2_046.txt, 2_047.txt, 2_048.txt, 2_049.txt, 2_050.txt, 2_051.txt, 2_052.txt, 2_053.txt, 2_054.txt, 2_055.txt, 2_056.txt, 2_057.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
0_000.txt | AC | 3 ms | 256 KB |
0_001.txt | AC | 3 ms | 256 KB |
0_002.txt | AC | 3 ms | 256 KB |
0_003.txt | AC | 3 ms | 256 KB |
0_004.txt | AC | 3 ms | 256 KB |
1_005.txt | AC | 3 ms | 256 KB |
1_006.txt | AC | 3 ms | 256 KB |
1_007.txt | AC | 3 ms | 256 KB |
1_008.txt | AC | 3 ms | 384 KB |
1_009.txt | AC | 3 ms | 384 KB |
1_010.txt | AC | 3 ms | 384 KB |
1_011.txt | AC | 3 ms | 384 KB |
1_012.txt | AC | 3 ms | 384 KB |
1_013.txt | AC | 3 ms | 256 KB |
1_014.txt | AC | 3 ms | 384 KB |
1_015.txt | AC | 3 ms | 384 KB |
1_016.txt | AC | 3 ms | 384 KB |
1_017.txt | AC | 3 ms | 256 KB |
1_018.txt | AC | 3 ms | 384 KB |
1_019.txt | AC | 3 ms | 384 KB |
1_020.txt | AC | 3 ms | 384 KB |
1_021.txt | AC | 3 ms | 256 KB |
1_022.txt | AC | 3 ms | 384 KB |
1_023.txt | AC | 3 ms | 384 KB |
1_024.txt | AC | 3 ms | 384 KB |
1_025.txt | AC | 3 ms | 256 KB |
1_026.txt | AC | 3 ms | 384 KB |
1_027.txt | AC | 3 ms | 384 KB |
1_028.txt | AC | 3 ms | 384 KB |
1_029.txt | AC | 3 ms | 384 KB |
1_030.txt | AC | 3 ms | 384 KB |
1_031.txt | AC | 3 ms | 384 KB |
1_032.txt | AC | 3 ms | 384 KB |
2_033.txt | AC | 48 ms | 12032 KB |
2_034.txt | AC | 25 ms | 6144 KB |
2_035.txt | AC | 65 ms | 19840 KB |
2_036.txt | AC | 60 ms | 18176 KB |
2_037.txt | AC | 72 ms | 19840 KB |
2_038.txt | AC | 63 ms | 17408 KB |
2_039.txt | AC | 79 ms | 19840 KB |
2_040.txt | AC | 39 ms | 9984 KB |
2_041.txt | AC | 85 ms | 19840 KB |
2_042.txt | AC | 17 ms | 3968 KB |
2_043.txt | AC | 92 ms | 19840 KB |
2_044.txt | AC | 59 ms | 13056 KB |
2_045.txt | AC | 97 ms | 19840 KB |
2_046.txt | AC | 94 ms | 18944 KB |
2_047.txt | AC | 103 ms | 19840 KB |
2_048.txt | AC | 43 ms | 8832 KB |
2_049.txt | AC | 108 ms | 19840 KB |
2_050.txt | AC | 68 ms | 13056 KB |
2_051.txt | AC | 113 ms | 19840 KB |
2_052.txt | AC | 101 ms | 17920 KB |
2_053.txt | AC | 48 ms | 12032 KB |
2_054.txt | AC | 113 ms | 19840 KB |
2_055.txt | AC | 87 ms | 19840 KB |
2_056.txt | AC | 85 ms | 19840 KB |
2_057.txt | AC | 74 ms | 19840 KB |