#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;
}
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; } |
English