cp_library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub SSRS-cp/cp_library

:warning: old_Data_Structures/Inversion_Number.cpp

Code

long long inversion_number(vector<int> &p){
	int N = p.size();
	long long ans = 0;
	vector<int> bit(N + 1, 0);
	for (int i = 0; i < N; i++){
		ans += i;
		int j = p[i];
		while (j > 0){
			ans -= bit[j];
			j -= j & -j;
		}
		j = p[i];
		while (j <= N){
			bit[j]++;
			j += j & -j;
		}
	}
	return ans;
}
long long inversion_number(vector<int> &A){
	int N = A.size();
	vector<int> B = A;
	sort(B.begin(), B.end());
	map<int, int> mp;
	for (int i = 0; i < N; i++){
		mp[B[i]] = i + 1;
	}
	for (int i = 0; i < N; i++){
		A[i] = mp[A[i]];
	}
	long long ans = 0;
	vector<int> BIT(N + 1, 0);
	for (int i = 0; i < N; i++){
		ans += i;
		int j = A[i];
		while (j > 0){
			ans -= BIT[j];
			j -= j & -j;
		}
		j = A[i];
		while (j <= N){
			BIT[j]++;
			j += j & -j;
		}
	}
	return ans;
}
#line 1 "old_Data_Structures/Inversion_Number.cpp"
long long inversion_number(vector<int> &p){
	int N = p.size();
	long long ans = 0;
	vector<int> bit(N + 1, 0);
	for (int i = 0; i < N; i++){
		ans += i;
		int j = p[i];
		while (j > 0){
			ans -= bit[j];
			j -= j & -j;
		}
		j = p[i];
		while (j <= N){
			bit[j]++;
			j += j & -j;
		}
	}
	return ans;
}
long long inversion_number(vector<int> &A){
	int N = A.size();
	vector<int> B = A;
	sort(B.begin(), B.end());
	map<int, int> mp;
	for (int i = 0; i < N; i++){
		mp[B[i]] = i + 1;
	}
	for (int i = 0; i < N; i++){
		A[i] = mp[A[i]];
	}
	long long ans = 0;
	vector<int> BIT(N + 1, 0);
	for (int i = 0; i < N; i++){
		ans += i;
		int j = A[i];
		while (j > 0){
			ans -= BIT[j];
			j -= j & -j;
		}
		j = A[i];
		while (j <= N){
			BIT[j]++;
			j += j & -j;
		}
	}
	return ans;
}
Back to top page