#include "message.h"
#include "teatr.h"
#include <cstdio>
using namespace std;
long long wyn, d[20000], zak=16380, il, ile;
int p,a,n,k,x;
int main() {
if(MyNodeId() == 0) {
for(int i=1; i<=62; i++)
{
Receive(i);
wyn+=GetLL(i);
}
printf("%lld", wyn);
}
else if(MyNodeId()<=62)
{
n=GetN();
p=1+(MyNodeId()-1)*zak; k=p+zak-1;
for(int i=0; i<n; i++)
{
a=GetElement(i);
if(a>k)il++;
if(p<=a&&a<=k)
{
wyn+=il+ile;
x=a-p+1;
while(x>0)
{
wyn-=d[x];
x-=(x&(-x));
}
x=a-p+1;
while(x<=zak)
{
d[x]++;
x+=(x&(-x));
}
ile++;
}
}
PutLL(0,wyn);
Send(0);
}
}
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 | #include "message.h" #include "teatr.h" #include <cstdio> using namespace std; long long wyn, d[20000], zak=16380, il, ile; int p,a,n,k,x; int main() { if(MyNodeId() == 0) { for(int i=1; i<=62; i++) { Receive(i); wyn+=GetLL(i); } printf("%lld", wyn); } else if(MyNodeId()<=62) { n=GetN(); p=1+(MyNodeId()-1)*zak; k=p+zak-1; for(int i=0; i<n; i++) { a=GetElement(i); if(a>k)il++; if(p<=a&&a<=k) { wyn+=il+ile; x=a-p+1; while(x>0) { wyn-=d[x]; x-=(x&(-x)); } x=a-p+1; while(x<=zak) { d[x]++; x+=(x&(-x)); } ile++; } } PutLL(0,wyn); Send(0); } } |
English