Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int calculateAnswer(vector<int> &p, int l, int r) {
- if (l == r) {
- return 0;
- }
- int m = (l + r) / 2;
- int answer = calculateAnswer(p, l, m) + calculateAnswer(p, m + 1, r);
- int i = l, j = m;
- for (; i <= m; i++) {
- while (j + 1 <= r && p[i] > p[j + 1]) {
- j++;
- }
- answer += j - m;
- }
- vector<int> v;
- i = l, j = m + 1;
- while (i <= m && j <= r) {
- if (p[i] < p[j]) {
- v.push_back(p[i++]);
- } else {
- v.push_back(p[j++]);
- }
- }
- while (i <= m) {
- v.push_back(p[i++]);
- }
- while (j <= r) {
- v.push_back(p[j++]);
- }
- for (i = l; i <= r; i++) {
- p[i] = v[i - l];
- }
- return answer;
- }
- int main() {
- int n;
- cin >> n;
- vector<int> p(n);
- for (auto &i : p) {
- cin >> i;
- }
- int answer = calculateAnswer(p, 0, n - 1);
- cout << answer;
- }
Advertisement
Add Comment
Please, Sign In to add comment