feat: new divide and conquer problem formated.
This commit is contained in:
45
bolhas/src/ac.cpp
Normal file
45
bolhas/src/ac.cpp
Normal file
@@ -0,0 +1,45 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
typedef long long ll;
|
||||
|
||||
ll countInversions(vector<int> &seq, int left, int right) {
|
||||
if (left >= right) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int middle = (left + right)/2;
|
||||
ll inversions = 0;
|
||||
inversions += countInversions(seq, left, middle);
|
||||
inversions += countInversions(seq, middle + 1, right);
|
||||
|
||||
vector<int> l(seq.begin() + left, seq.begin() + middle + 1);
|
||||
vector<int> r(seq.begin() + middle + 1, seq.begin() + right + 1);
|
||||
|
||||
int leftSize = l.size(), rightSize = r.size();
|
||||
|
||||
for (int i = 0, j = 0; i < leftSize || j < rightSize;) {
|
||||
if (i >= leftSize || (j < rightSize && r[j] < l[i])) {
|
||||
seq[left++] = r[j++];
|
||||
inversions += ((ll)leftSize - (ll)i);
|
||||
} else {
|
||||
seq[left++] = l[i++];
|
||||
}
|
||||
}
|
||||
|
||||
return inversions;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int N; cin >> N;
|
||||
vector<int> seq(N);
|
||||
for (int i = 0; i < N; i++) cin >> seq[i];
|
||||
|
||||
if (countInversions(seq, 0, N - 1) & 1) {
|
||||
cout << "Marcelo" << endl;
|
||||
} else {
|
||||
cout << "Carlos" << endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user