1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <bits/stdc++.h>
#include "message.h"
#include "teatr.h"

using namespace std;

#define milion 1000000

const int baza = 1<<20;
int drz[baza*2];

int czytaj( int gdzie ) {
	int kon = baza*2-1;
	gdzie += baza+1;
	int wyn=0;
	while( gdzie<=kon ) {
		if( gdzie%2 ) wyn += drz[gdzie];
		gdzie = (gdzie+1)/2;
		kon /= 2;
	}
	return wyn;
}

void add( int gdzie ) {
	gdzie += baza;
	while( gdzie ) {
		drz[gdzie]++;
		gdzie/=2;
	}
}

int NON = NumberOfNodes();
int ID = MyNodeId();

int32_t main() {
	ios_base::sync_with_stdio( 0 );
	cin.tie( 0 );
	
	int n=GetN();
	int l=min(    ID*milion, n );
	int r=min( (ID+1)*milion, n );
	
	//cout << l << " " << r << endl;
	
	for( int i=0; i<l; i++ ) {
		drz[ GetElement(i)+baza ]++;
	}
	for( int i=baza-1; i>0; i-- ) {
		drz[i] = drz[i*2] + drz[i*2+1];
	}
	long long res=0;
	for( int x, i=l; i<r; i++ ) {
		x = GetElement(i);
		res += czytaj(x);
		add(x);
	}
	if( ID ) {
		PutLL( 0, res );
		Send( 0 );
		return 0;
	}
	for( int i=1; i<NON; i++ ) {
		Receive( i );
		res += GetLL( i );
	}
	cout << res << "\n";
	
	return 0;
}
/*
5
5 2 4 4 3
*/