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

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