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
#include "message.h"
#include "teatr.h"
#include <cstdio>
using namespace std;
typedef long long LL;
int d[2100000]={};
int b,e,k,n;
LL res=0;
void zmi(int k)
{
    while(k)
    {
        ++d[k];
        k>>=1;
    }
}
void czyt(int k)
{
    while(k)
    {
        if(k&1)
            k>>=1;
        else
            res+=d[k--],k>>=1;
    }
}
int main() {
    const int k=MyNodeId(),n=GetN();
    const int b=LL(k)*n/100,e=LL(k+1)*n/100;
    int q,i,b2=b;
    while(b2--)
        ++d[GetElement(b2)+1048576];
    for(i=1048575;i;--i)
    {
        d[i]=d[i<<1]+d[1+(i<<1)];
    }
    for(i=b;i<e;++i)
    {
        q=GetElement(i);
        zmi(1048576+q);
        czyt(1048576+q);
    }
    if(k)
        PutLL(0,res),Send(0);
    else
    {
        LL bb;
        for(i=1;i<100;++i)
            Receive(i),bb=GetLL(i),res+=bb;
        printf("%lld",LL(n)*(n+1)/2-res);
    }
    return 0;
}