#include "message.h"
#include "teatr.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
typedef pair<int,int> pii;
typedef long long ll;
typedef double ld;
typedef vector<int> vi;
#define fi first
#define se second
#define fe first
#define SZ 1000555
ll bs[SZ];
int main()
{
ll n=GetN(),x=13,m=MyNodeId(),qz[233];
qz[0]=0;
for(int i=1;i<=x;++i) qz[i]=n/x*i;
qz[x]=n;
//[qz[i],qz[i+1])
map<pii,int> al; int G=0;
al[pii(-2,-2)]=0;
for(int i=0;i<x;++i) al[pii(i,i)]=++G;
for(int i=0;i<x;++i)
for(int j=i+1;j<x;++j)
al[pii(i,j)]=++G;
int a=-1,b=-1;
for(auto t:al)
if(t.se==m) a=t.fi.fi,b=t.fi.se;
if(a==-1) return 0;
if(a==-2) //receiver
{
ll su=0;
for(int i=1;i<=G;++i)
Receive(i),su+=GetLL(i);
cout<<su<<"\n";
return 0;
}
if(a==b)
{
ll su=0;
for(int g=qz[a+1]-1;g>=qz[a];--g)
{
int v=GetElement(g);
for(int t=v-1;t>=1;t-=t&-t) su+=bs[t];
for(int t=v;t<SZ;t+=t&-t) ++bs[t];
}
PutLL(0,su),Send(0);
return 0;
}
if(a!=b)
{
ll su=0;
for(int g=qz[b+1]-1;g>=qz[b];--g)
++bs[GetElement(g)];
for(int i=1;i<SZ;++i) bs[i]+=bs[i-1];
for(int g=qz[a+1]-1;g>=qz[a];--g)
su+=bs[GetElement(g)-1];
PutLL(0,su),Send(0);
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 54 55 56 57 58 59 60 61 62 63 | #include "message.h" #include "teatr.h" #include <bits/stdc++.h> using namespace std; #define pb push_back typedef pair<int,int> pii; typedef long long ll; typedef double ld; typedef vector<int> vi; #define fi first #define se second #define fe first #define SZ 1000555 ll bs[SZ]; int main() { ll n=GetN(),x=13,m=MyNodeId(),qz[233]; qz[0]=0; for(int i=1;i<=x;++i) qz[i]=n/x*i; qz[x]=n; //[qz[i],qz[i+1]) map<pii,int> al; int G=0; al[pii(-2,-2)]=0; for(int i=0;i<x;++i) al[pii(i,i)]=++G; for(int i=0;i<x;++i) for(int j=i+1;j<x;++j) al[pii(i,j)]=++G; int a=-1,b=-1; for(auto t:al) if(t.se==m) a=t.fi.fi,b=t.fi.se; if(a==-1) return 0; if(a==-2) //receiver { ll su=0; for(int i=1;i<=G;++i) Receive(i),su+=GetLL(i); cout<<su<<"\n"; return 0; } if(a==b) { ll su=0; for(int g=qz[a+1]-1;g>=qz[a];--g) { int v=GetElement(g); for(int t=v-1;t>=1;t-=t&-t) su+=bs[t]; for(int t=v;t<SZ;t+=t&-t) ++bs[t]; } PutLL(0,su),Send(0); return 0; } if(a!=b) { ll su=0; for(int g=qz[b+1]-1;g>=qz[b];--g) ++bs[GetElement(g)]; for(int i=1;i<SZ;++i) bs[i]+=bs[i-1]; for(int g=qz[a+1]-1;g>=qz[a];--g) su+=bs[GetElement(g)-1]; PutLL(0,su),Send(0); return 0; } } |
English