// UVa 11858 - Frosh Week
#include <stdio.h>
#include <vector>
#include <iostream>
using namespace std;
#define integer signed long long
vector<integer> v;
integer merge(integer ini, integer mid, integer fin) {
vector<integer> a, b;
for (integer i = ini; i <= mid; i++)
a.push_back(v[i]);
for (integer i = mid + 1; i <= fin; i++)
b.push_back(v[i]);
integer i = 0;
integer j = 0;
integer k = ini;
integer c = 0;
while (i < a.size() || j < b.size()) {
if (i >= a.size())
v[k++] = b[j++];
else if (j >= b.size())
v[k++] = a[i++];
else if (a[i] <= b[j])
v[k++] = a[i++];
else {
v[k++] = b[j++];
c += a.size() - i;
}
}
return c;
}
integer mergesort(integer ini, integer fin) {
if (ini < fin) {
integer mid = (ini + fin) >> 1;
integer c = mergesort(ini, mid);
c += mergesort(mid + 1, fin);
c += merge(ini, mid, fin);
return c;
} else
return 0;
}
int main() {
integer n;
while (cin >> n) {
v.clear();
for (integer i = 0; i < n; i++) {
integer a;
cin >> a;
v.push_back(a);
}
cout << mergesort(0, n - 1) << endl;
}
return 0;
}
Monday, June 27, 2016
UVa 11858 - Frosh Week
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment