Skip to content

Instantly share code, notes, and snippets.

@fredbr
Created May 22, 2018 22:30
Show Gist options
  • Save fredbr/bc9445d6e8e767f680fdffd3cfddb4c4 to your computer and use it in GitHub Desktop.
Save fredbr/bc9445d6e8e767f680fdffd3cfddb4c4 to your computer and use it in GitHub Desktop.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vll;
const ll inf = 0x3fffffffffffffff;
ll merge(vll & v)
{
if (v.size() == 1) return 0;
int sz = (int)v.size();
vll a;
vll b;
for (int i = 0; i < sz/2; i++) a.push_back(v[i]);
for (int i = sz/2 ; i < sz; i++) b.push_back(v[i]);
ll an = merge(a);
an += merge(b);
a.push_back(-inf);
b.push_back(-inf);
int i = 0, j = 0;
for (int ind = 0; ind < sz; ind++) {
if (a[i] <= b[j]) {
v[ind] = b[j];
j++;
an += (ll)a.size() - (ll)i - 1;
} else if (a[i] > b[j]) {
v[ind] = a[i];
i++;
}
}
return an;
}
int main()
{
int n;
cin >> n;
vll v;
ll a, b;
for (int i = 0; i < n; i++) {
cin >> a >> b;
v.push_back(a*a + b*b);
}
ll resp = merge(v);
cout << resp << "\n";
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment