QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#821414 | #9886. Long Sequence Inversion 2 | IllusionaryDominance# | WA | 44ms | 7124kb | C++20 | 1.7kb | 2024-12-19 15:53:52 | 2024-12-19 15:53:52 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e6 + 10;
const ll MOD = 998244353;
struct BIT {
int n;
vector <int> bit;
void init(int _n) {n = _n, bit.resize(n + 1);}
void add(int x, int val) {
for (; x <= n; x += (x & -x)) bit[x] += val;
}
int query(int x) {
int re = 0;
for (; x; x -= (x & -x)) re += bit[x];
return re;
}
int queryRange(int l, int r) {
return query(r) - query(l - 1);
}
}tot;
ll pw[N];
int main() {
ios::sync_with_stdio(0), cin.tie(0);
int L, B;
cin >> L >> B;
vector<int>P(L + 1), rnk(L + 1);
vector<vector<int> > V(L + 1);
tot.init(L);
pw[0] = 1;
for (int i = 0; i < L; ++ i, pw[i] = pw[i - 1] * B % MOD) cin >> P[i], rnk[P[i]] = i, tot.add(i + 1, 1);
for (int i = 0; i < L; ++ i) {
V[i].resize(B + 10);
for (int j = 0; j < B; ++ j) cin >> V[i][j];
}
ll ans = 0, mul = 1;
for (int i = L - 1; ~i; -- i) {
int pos = rnk[i] + 1, bit;
tot.add(pos, -1);
bit = tot.queryRange(1, pos);
// cerr << bit << " ";
BIT inv;
inv.init(B);
for (int j = 0; j < B; ++ j) {
int val = V[pos - 1][j] + 1;
(ans += inv.queryRange(val, B) * pw[bit] % MOD * pw[bit] % MOD * pw[i - bit] % MOD * mul) %= MOD;
inv.add(val, 1);
}
// cerr << ans << " ";
(ans += (pw[i - bit] * (pw[i - bit] - 1) >> 1) % MOD * (((B * (B - 1)) >> 1) % MOD) * (pw[bit] * pw[bit] % MOD) % MOD * mul % MOD) %= MOD;
// cerr << ans << "\n";
mul = mul * B % MOD;
}
cout << ans;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3824kb
input:
3 2 2 0 1 1 0 1 0 0 1
output:
14
result:
ok "14"
Test #2:
score: 0
Accepted
time: 0ms
memory: 3528kb
input:
2 4 1 0 2 0 3 1 1 2 3 0
output:
60
result:
ok "60"
Test #3:
score: 0
Accepted
time: 0ms
memory: 3776kb
input:
9 10 2 5 7 3 8 1 4 6 0 9 2 4 0 1 6 7 3 5 8 4 1 6 7 8 0 5 9 2 3 1 9 2 4 6 8 5 7 0 3 9 0 8 2 5 1 6 7 3 4 1 6 0 7 3 9 2 4 5 8 4 5 2 9 1 6 7 3 0 8 7 0 5 6 1 9 2 4 3 8 3 2 1 6 7 0 8 9 4 5 9 2 4 3 5 8 0 6 7 1
output:
138876070
result:
ok "138876070"
Test #4:
score: 0
Accepted
time: 42ms
memory: 7124kb
input:
1 499999 0 29619 375702 37496 460566 304389 460489 39603 7903 258016 288263 472075 22596 331493 275661 56064 364938 166384 286514 449089 71295 83634 202532 408346 34349 425929 67826 14897 21894 481996 394928 368071 394991 213881 134433 345718 371785 68019 323247 290861 175555 464454 99312 318279 474...
output:
633597495
result:
ok "633597495"
Test #5:
score: 0
Accepted
time: 44ms
memory: 5936kb
input:
2 249999 0 1 58555 86505 217289 160736 134400 101021 40586 62145 139626 85795 167411 201337 98 206983 47713 102694 69929 120989 89299 38007 101502 27064 176770 192694 169507 5163 4199 146210 77723 135393 61474 73326 132827 234968 141265 84204 225082 101831 136349 51115 81706 174808 187315 54745 2076...
output:
434358382
result:
ok "434358382"
Test #6:
score: -100
Wrong Answer
time: 40ms
memory: 5772kb
input:
3 166665 1 0 2 149754 119575 144273 87381 53800 132528 160539 144804 131044 71756 48801 102732 165255 134183 209 129510 122930 87083 34658 111061 142811 141126 65071 45113 142272 2250 137690 86010 2090 101555 148432 56852 17952 53004 11972 36883 144729 44003 59504 11894 15877 47449 95378 59419 12379...
output:
553705889
result:
wrong answer 1st words differ - expected: '906627900', found: '553705889'