#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
vector<long long> count_inv(vector<long long> &left, vector<long long> &right, int &count);
vector<long long> split(vector<long long> &A, int &count)
{
if (A.size() == 1)
return A;
else
{
int mid = A.size()/2;
int umid = A.size() - mid;
vector<long long> *left, *right;
left = new vector<long long>(mid);
right = new vector<long long>(umid);
for (int i = 0;i < mid;i++)
*left[i] = A[i];
for (int i = mid, j = 0;i < A.size();i++, j++)
*right[j] = A[i];
split(*left, count);
split(*right, count);
left->push_back(LLONG_MAX);
right->push_back(LLONG_MAX);
vector<long long> C = count_inv(*left, *right, count);
return C;
}
}
vector<long long> count_inv(vector<long long> &left, vector<long long> &right, int &count)
{
vector<long long> *merged;
merged = new vector<long long>(left.size() + right.size() - 2);
int i = 0, j = 0, k = 0;
while (i + j != left.size() + right.size() - 2)
{
if (left[i] < right[j])
{
*merged[k] = left[i];
i++;k++;
}
else if (left[i] > right[j])
{
*merged[k] = right[j];
j++;k++;count++;
}
else
{
*merged[k] = left[i];
*merged[k + 1] = right[j];
i++;j++;k += 2;
}
}
return *merged;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t;
cin >> t;
while (t--)
{
cout << endl;
int n;
cin >> n;
vector<long long> A(n);
for (int i = 0;i < n;i++)
cin >> A[i];
int count = 0;
vector<long long> S = split(A, count);
cout << count << endl;
}
return 0;
}
必要ないくつかの動的なメモリ割り当て上記のコードで動的に割り当てられたメモリを扱うとき、私のコンパイラは私にエラーを与えるということですので、私はC++で新しいキーでそうした、しかし、コンパイラは私に次のようになりますすべての行でエラーはなぜC++
Severity Code Description Project File Line Suppression State
Error (active) E0349 no operator "*" matches these operands
は、私は、すなわちライン23,25,44,49,54,55に、動的に割り当てられたメモリを欽慕する「*」を使用しました。
まもなくベクトルは、オブジェクトが、アレイと操作するためのインタフェースではありません。 – user3811082
通常、 'new vector'は必要ありません。あなたは確かにこのプログラムでそれを必要としません。 'std :: vector'をポインタなしで直接使用するように書き直してください。 –