Mible2012 @ 2024-12-28 17:31:51
#include <iostream>
#include<vector>
#include<algorithm>
#include<unordered_map>
using namespace std;
const int MAXN = 5e5 + 5;
vector<int> arr;
vector<int> arr2;
int bit[MAXN];
unordered_map<int,int> map;
void update(int idx, int val, int n) {
while (idx <= n) {
bit[idx] += val;
idx += idx & -idx;
}
}
int query(int idx) {
int sum = 0;
while (idx > 0) {
sum += bit[idx];
idx -= idx & -idx;
}
return sum;
}
void lisanhua(){
arr2=arr;
sort(arr2.begin(), arr2.end());
arr2.erase(unique(arr2.begin(),arr2.end()),arr2.end());
for (int i = 0; i < arr.size(); ++i) {
map[arr[i]] = lower_bound(arr2.begin(),arr2.end(), arr[i]) - arr2.begin() + 1;
}
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> arr[i];
}
lisanhua();
long long ans=0;
for (int i = n-1; i >= 0; --i) {
int now= map[arr[i]];
ans+=query(now-1);
update(now,1,n);
}
cout<<ans;
return 0;
}
非常没有问题的代码,结果: 全RE,运行一下,输入都不行。 经过一堆排查,我发现了问题的所在:
vector<int> arr(MAXN);
vector<int> arr2(MAXN);
这玩意必须得加(MAXN),不然会炸。