Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<iostream>using namespace std;int boat[100000];int copy1[100000];void merge2(int begin1, int begin2, int end, long long & count){int i = 0, a = begin1, b = begin2;while(i < end - begin1) {if(a == begin2)copy1[i] = boat[b], ++b;else if(b == end)copy1[i] = boat[a], ++a;else{if(boat[b] < boat[a])copy1[i] = boat[b], ++b, count += (begin2 - a);elsecopy1[i] = boat[a], ++a;}++i;}i = 0, a = begin1;while(i < end - begin1) {boat[a++] = copy1[i++];}return;}void merge(int begin, int end, long long &count){if(end <= begin + 1) return;merge(begin, begin + (end - begin) / 2, count);merge(begin + (end - begin) / 2, end, count);