Task: | Mega Inversions |
Sender: | team univelka |
Submission time: | 2017-10-03 17:20:49 +0300 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.20 s | details |
#2 | ACCEPTED | 0.17 s | details |
#3 | ACCEPTED | 0.16 s | details |
#4 | ACCEPTED | 0.16 s | details |
#5 | ACCEPTED | 0.18 s | details |
#6 | ACCEPTED | 0.21 s | details |
#7 | ACCEPTED | 0.17 s | details |
#8 | ACCEPTED | 0.17 s | details |
#9 | ACCEPTED | 0.18 s | details |
#10 | ACCEPTED | 0.16 s | details |
#11 | ACCEPTED | 0.05 s | details |
#12 | ACCEPTED | 0.07 s | details |
#13 | ACCEPTED | 0.07 s | details |
#14 | ACCEPTED | 0.06 s | details |
#15 | ACCEPTED | 0.06 s | details |
#16 | ACCEPTED | 0.06 s | details |
#17 | ACCEPTED | 0.08 s | details |
#18 | ACCEPTED | 0.06 s | details |
Code
#include <iostream> #include <vector> #include <algorithm> #include <utility> const int N = 5 * (1e5); int vals [N]; long long count [N+2]; long long total [N+2]; void add_total(int i, long long v) { while(i < N+2) { total[i] += v; i += (i & -i); } } long long count_total(int i) { long long res = 0; while(i > 0) { res += total[i]; i -= (i & -i); } return res; } void add_count(int i, long long v) { while(i < N+2) { count[i] += v; i += (i & -i); } } long long count_count(int i) { long long res = 0; while(i > 0) { res += count[i]; i -= (i & -i); } return res; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(0); int n; std::cin >> n; for (int i = 0; i < n; ++i) { std::cin >> vals[i]; } long long res = 0; for (int i = n-1; i >= 0; --i) { res += count_total(vals[i] - 1); // all three add_total(vals[i], count_count(vals[i] - 1)); // two add_count(vals[i], 1); // one } std::cout << res << '\n'; }
Test details
Test 1
Verdict: ACCEPTED
input |
---|
500000 289384 430887 192778 136916 24... |
correct output |
---|
3462273770285851 |
user output |
---|
3462273770285851 |
Test 2
Verdict: ACCEPTED
input |
---|
500000 382213 21639 220700 75692 3046... |
correct output |
---|
3485180959426295 |
user output |
---|
3485180959426295 |
Test 3
Verdict: ACCEPTED
input |
---|
500000 126690 371364 446885 348594 13... |
correct output |
---|
3477492420887556 |
user output |
---|
3477492420887556 |
Test 4
Verdict: ACCEPTED
input |
---|
500000 42662 481114 312377 69861 7962... |
correct output |
---|
3475393752560785 |
user output |
---|
3475393752560785 |
Test 5
Verdict: ACCEPTED
input |
---|
500000 87517 398064 349297 387923 451... |
correct output |
---|
3471906656975056 |
user output |
---|
3471906656975056 |
Test 6
Verdict: ACCEPTED
input |
---|
500000 32451 250738 273961 357671 137... |
correct output |
---|
3460754378741711 |
user output |
---|
3460754378741711 |
Test 7
Verdict: ACCEPTED
input |
---|
500000 90672 310026 72922 224011 3703... |
correct output |
---|
3476018102026120 |
user output |
---|
3476018102026120 |
Test 8
Verdict: ACCEPTED
input |
---|
500000 425377 326433 228759 266715 81... |
correct output |
---|
3465242936420874 |
user output |
---|
3465242936420874 |
Test 9
Verdict: ACCEPTED
input |
---|
500000 23470 483991 430548 458582 278... |
correct output |
---|
3470073617672348 |
user output |
---|
3470073617672348 |
Test 10
Verdict: ACCEPTED
input |
---|
500000 369724 122728 326689 334480 34... |
correct output |
---|
3474985893406401 |
user output |
---|
3474985893406401 |
Test 11
Verdict: ACCEPTED
input |
---|
10000 605 9123 24 8124 4758 1782 975... |
correct output |
---|
27409866438 |
user output |
---|
27409866438 |
Test 12
Verdict: ACCEPTED
input |
---|
100000 42 18468 6335 26501 19170 1572... |
correct output |
---|
27944091731907 |
user output |
---|
27944091731907 |
Test 13
Verdict: ACCEPTED
input |
---|
100000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
0 |
user output |
---|
0 |
Test 14
Verdict: ACCEPTED
input |
---|
99999 99999 99998 99997 99996 99995 ... |
correct output |
---|
166656666849999 |
user output |
---|
166656666849999 |
Test 15
Verdict: ACCEPTED
input |
---|
99998 2 1 4 3 6 5 8 7 10 9 12 11 14 ... |
correct output |
---|
49997 |
user output |
---|
49997 |
Test 16
Verdict: ACCEPTED
input |
---|
99997 1 99995 99996 99993 99994 9999... |
correct output |
---|
166636668399968 |
user output |
---|
166636668399968 |
Test 17
Verdict: ACCEPTED
input |
---|
100000 32769 32763 32774 32764 32761 ... |
correct output |
---|
5672756782663 |
user output |
---|
5672756782663 |
Test 18
Verdict: ACCEPTED
input |
---|
10 10 10 10 10 10 10 10 10 10 9 |
correct output |
---|
0 |
user output |
---|
0 |