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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include "message.h"
#include "teatr.h"
using namespace std;
int tab[1000002];
//symulacja biblioteczki
/*#include <vector>
#include <cassert>
int wej[1000002], akt,  n;
void init()
{
    cin >> n;
    for (int i=0; i<n; i++)
    {
        cin >> wej[i];
    }
}
int GetN()
{
    return n;
}
int GetElement(int i)
{
    return wej[i];
}*/
/*int GetN() { return 100 * 1000 * 1000; }
int GetElement(int i) {
return 1 + (((long long)i * 27) + i & (i %113) + ((i % 37) ^ (i % 20)) * 3571) % 1000000;
}*/
/*int MyNodeId()
{
    return akt;
}
vector<long long> wiadomosci;
void PutLL(int i, long long k)
{
    wiadomosci.push_back(k);
}
void Send(int i){}
int Receive(int i){return 1;};
long long GetLL(int i)
{
    assert(!wiadomosci.empty());
    long long a=wiadomosci.back();
    if (i>0)
        wiadomosci.pop_back();
    return a;
}*/
int main()
{
    int n=GetN();
    int inst=MyNodeId(), pot=1;
    if (inst>30)
        return 0;
    for (int i=0; i<inst; i++)
        pot*=2;
    long long wyn=0;
    for (int i=0; i<n; i++)
    {
        int a=GetElement(i);
        a/=pot;
        if (a%2==1)
            tab[a]++;
        else
            wyn+=tab[a+1];
    }
    //cout << wyn << "\n";
    if (inst!=0)
    {
        PutLL(0, wyn);
        Send(0);
        return 0;
    }
    for (int i=1; i<=30; i++)
    {
        int blah=Receive(i);
        //cout << GetLL(-i) << " " << i << "\n";
        wyn+=GetLL(i);
    }
    cout << wyn << "\n";
    return 0;
}
/*int main()
{
    //init();
    for (int i=99; i>=0; i--)
    {
        for (int i=0; i<=1000000; i++)
            tab[i]=0;
        akt=i;
        int blah=fun();
    }
}*/