#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 */
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 */ |