CSES - KILO 2017 5/5 - Results
Submission details
Task:Mega Inversions
Sender:Pietari Kaskela
Submission time:2017-10-03 18:43:48 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.32 sdetails
#2ACCEPTED0.28 sdetails
#3ACCEPTED0.36 sdetails
#4ACCEPTED0.30 sdetails
#5ACCEPTED0.32 sdetails
#6ACCEPTED0.34 sdetails
#7ACCEPTED0.32 sdetails
#8ACCEPTED0.30 sdetails
#9ACCEPTED0.32 sdetails
#10ACCEPTED0.27 sdetails
#11ACCEPTED0.07 sdetails
#12ACCEPTED0.08 sdetails
#13ACCEPTED0.08 sdetails
#14ACCEPTED0.11 sdetails
#15ACCEPTED0.09 sdetails
#16ACCEPTED0.09 sdetails
#17ACCEPTED0.11 sdetails
#18ACCEPTED0.05 sdetails

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