CSES - KILO 2017 5/5 - Results
Submission details
Task:Mega Inversions
Sender:Semikolonisti
Submission time:2017-10-03 16:45:05 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.45 sdetails
#2ACCEPTED0.56 sdetails
#3ACCEPTED0.49 sdetails
#4ACCEPTED0.49 sdetails
#5ACCEPTED0.47 sdetails
#6ACCEPTED0.47 sdetails
#7ACCEPTED0.54 sdetails
#8ACCEPTED0.51 sdetails
#9ACCEPTED0.45 sdetails
#10ACCEPTED0.46 sdetails
#11ACCEPTED0.05 sdetails
#12ACCEPTED0.12 sdetails
#13ACCEPTED0.10 sdetails
#14ACCEPTED0.13 sdetails
#15ACCEPTED0.12 sdetails
#16ACCEPTED0.12 sdetails
#17ACCEPTED0.10 sdetails
#18ACCEPTED0.04 sdetails

Code

#include <bits/stdc++.h>

#define ll long long
#define N (1<<19)
using namespace std;

ll v[2 * N];

void inc (int k, ll n) {
    k += N;
    v[k] += n;
    for (k /= 2; k >= 1; k /= 2) v[k] = v[2 * k] + v[2 * k + 1];
}

ll sum (int a) {
    int b = 500000;
    ll s = 0;
    a += N;
    b += N;
    while (a <= b) {
        if (a & 1) s += v[a++];
        if (~b & 1) s += v[b--];
        a /= 2; b /= 2;
    }
    return s;
}

ll v2[2 * N];

void inc2 (int k, ll n) {
    k += N;
    v2[k] += n;
    for (k /= 2; k >= 1; k /= 2) v2[k] = v2[2 * k] + v2[2 * k + 1];
}

ll sum2 (int a) {
    ll s = 0;
    int b = 500000;
    a += N;
    b += N;
    while (a <= b) {
        if (a & 1) s += v2[a++];
        if (~b & 1) s += v2[b--];
        a /= 2; b /= 2;
    }
    return s;
}

int main () {
    int n;
    cin>>n;
    ll ans = 0;
    for (int i = 1; i <= n; i++) {
        ll x;
        cin>>x;
        ans += sum2(x + 1);
        inc2(x, sum(x + 1));
        inc(x, 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