#include <bits/stdc++.h>
#include <sys/time.h>
#include "teatr.h"
#include "message.h"
#define ST first
#define ND second
#define pb push_back
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define per(i, a, n) for (int i = a; i >= n; i--)
#define SZ(x) ((int)x.size())
#define ALL(x) (x.begin(), x.end())
#define pii pair <int, int>
#define ll long long
#define LD long double
using namespace std;
long long ans;
int ilosc, id;
int wl, wr, idx, n, mid, klotni, d[7000005], x;
int base = (1<<20);
void wstaw(int w)
{
w += base;
while(w>=1)
{
d[w]++;
w/=2;
}
}
/*void query(int a, int b, int w, int lo, int hi)
{
if (a==lo && b==hi)
{
ans+=d[w];
return;
}
if (a > b || a < lo || a > hi || b < lo || b > hi) return;
int mid = (lo+hi)/2;
query(a, min(mid, b), w*2, lo, mid);
query(max(mid+1, a), b, w*2+1, mid+1, hi);
}*/
void query(int w)
{
w+=base;
while(w > 1)
{
if(w%2==0)
ans+=d[w+1];
w/=2;
}
}
main()
{
ilosc = NumberOfNodes();
id = MyNodeId();
if(id!=0)return 0;
n = GetN();
rep(i, 0, n-1)
{
x = GetElement(i);
//cin>>x;
//cout<<i<<endl;
query(x);
//query(x+1, 1000000, 1, 1, base+1);
wstaw(x);
}
cout<<ans;
}
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 | #include <bits/stdc++.h> #include <sys/time.h> #include "teatr.h" #include "message.h" #define ST first #define ND second #define pb push_back #define rep(i, a, n) for (int i = a; i <= n; i++) #define per(i, a, n) for (int i = a; i >= n; i--) #define SZ(x) ((int)x.size()) #define ALL(x) (x.begin(), x.end()) #define pii pair <int, int> #define ll long long #define LD long double using namespace std; long long ans; int ilosc, id; int wl, wr, idx, n, mid, klotni, d[7000005], x; int base = (1<<20); void wstaw(int w) { w += base; while(w>=1) { d[w]++; w/=2; } } /*void query(int a, int b, int w, int lo, int hi) { if (a==lo && b==hi) { ans+=d[w]; return; } if (a > b || a < lo || a > hi || b < lo || b > hi) return; int mid = (lo+hi)/2; query(a, min(mid, b), w*2, lo, mid); query(max(mid+1, a), b, w*2+1, mid+1, hi); }*/ void query(int w) { w+=base; while(w > 1) { if(w%2==0) ans+=d[w+1]; w/=2; } } main() { ilosc = NumberOfNodes(); id = MyNodeId(); if(id!=0)return 0; n = GetN(); rep(i, 0, n-1) { x = GetElement(i); //cin>>x; //cout<<i<<endl; query(x); //query(x+1, 1000000, 1, 1, base+1); wstaw(x); } cout<<ans; } |
English