Task: | Mega Inversions |
Sender: | Pietari Kaskela |
Submission time: | 2017-10-03 18:43:48 +0300 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.32 s | details |
#2 | ACCEPTED | 0.28 s | details |
#3 | ACCEPTED | 0.36 s | details |
#4 | ACCEPTED | 0.30 s | details |
#5 | ACCEPTED | 0.32 s | details |
#6 | ACCEPTED | 0.34 s | details |
#7 | ACCEPTED | 0.32 s | details |
#8 | ACCEPTED | 0.30 s | details |
#9 | ACCEPTED | 0.32 s | details |
#10 | ACCEPTED | 0.27 s | details |
#11 | ACCEPTED | 0.07 s | details |
#12 | ACCEPTED | 0.08 s | details |
#13 | ACCEPTED | 0.08 s | details |
#14 | ACCEPTED | 0.11 s | details |
#15 | ACCEPTED | 0.09 s | details |
#16 | ACCEPTED | 0.09 s | details |
#17 | ACCEPTED | 0.11 s | details |
#18 | ACCEPTED | 0.05 s | details |
Code
#include <bits/stdc++.h> using namespace std; struct fenwick{ vector<int64_t> p; int n; void init(int n2){ n = n2; p = vector<int64_t>(n+1, 0); } void add(int idx, int64_t x){ idx++; while(idx <= n){ p[idx]+=x; idx+=idx&(-idx); } } int64_t query(int idx){ idx++; int64_t re = 0; while(idx > 0){ re+=p[idx]; idx-=idx&(-idx); } return re; } int64_t query(int a, int b){ if(b > 500000 || a > b) return 0; int64_t re = query(b); if(a > 0) re-=query(a-1); return re; } }; int n; int a[505050]; int main(){ cin >> n; fenwick t1, t2; t1.init(500000); t2.init(500000); for(int i = 0; i < n; ++i) cin >> a[i]; int64_t ans = 0; for(int i = n-1; i >= 0; --i){ t2.add(a[i], t1.query(1, a[i]-1)); t1.add(a[i], 1); ans+=t2.query(1, a[i]-1); } cout << ans << endl; }
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 |