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