Task: | Mega Inversions |
Sender: | liianvaikeitatehtäviä |
Submission time: | 2017-10-03 16:46:44 +0300 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.52 s | details |
#2 | ACCEPTED | 0.48 s | details |
#3 | ACCEPTED | 0.50 s | details |
#4 | ACCEPTED | 0.51 s | details |
#5 | ACCEPTED | 0.49 s | details |
#6 | ACCEPTED | 0.48 s | details |
#7 | ACCEPTED | 0.56 s | details |
#8 | ACCEPTED | 0.51 s | details |
#9 | ACCEPTED | 0.46 s | details |
#10 | ACCEPTED | 0.57 s | details |
#11 | ACCEPTED | 0.04 s | details |
#12 | ACCEPTED | 0.14 s | details |
#13 | ACCEPTED | 0.09 s | details |
#14 | ACCEPTED | 0.13 s | details |
#15 | ACCEPTED | 0.10 s | details |
#16 | ACCEPTED | 0.13 s | details |
#17 | ACCEPTED | 0.12 s | details |
#18 | ACCEPTED | 0.05 s | details |
Code
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1<<20; ll st[2*N]; ll st2[2*N]; ll getSum(int a, int b ){ a += N; b += N; ll sum = 0; for(; a <= b; a/=2, b/=2) { if(a&1) sum += st[a++]; if(~b&1) sum += st[b--]; } return sum; } void setValue(int a, ll v) { a += N; st[a] += v; for(a/=2; a; a/=2) { st[a] = st[a*2] + st[a*2+1]; } } ll getSum2(int a, int b ){ a += N; b += N; ll sum = 0; for(; a <= b; a/=2, b/=2) { if(a&1) sum += st2[a++]; if(~b&1) sum += st2[b--]; } return sum; } void setValue2(int a, ll v) { a += N; st2[a] += v; for(a/=2; a; a/=2) { st2[a] = st2[a*2] + st2[a*2+1]; } } int t[1010101]; int main() { int n; cin>>n; ll ans = 0; for(int i = 0; i < n; ++i) { cin>>t[i]; ans += getSum(t[i]+1, N-1); setValue(t[i], getSum2(t[i]+1, N-1)); setValue2(t[i], 1); } cout<<ans<<'\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 |