CSES - KILO 2017 5/5 - Results
Submission details
Task:Mega Inversions
Sender:team univelka
Submission time:2017-10-03 17:20:49 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.20 sdetails
#2ACCEPTED0.17 sdetails
#3ACCEPTED0.16 sdetails
#4ACCEPTED0.16 sdetails
#5ACCEPTED0.18 sdetails
#6ACCEPTED0.21 sdetails
#7ACCEPTED0.17 sdetails
#8ACCEPTED0.17 sdetails
#9ACCEPTED0.18 sdetails
#10ACCEPTED0.16 sdetails
#11ACCEPTED0.05 sdetails
#12ACCEPTED0.07 sdetails
#13ACCEPTED0.07 sdetails
#14ACCEPTED0.06 sdetails
#15ACCEPTED0.06 sdetails
#16ACCEPTED0.06 sdetails
#17ACCEPTED0.08 sdetails
#18ACCEPTED0.06 sdetails

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