LeetCode 5999. 统计数组中好三元组数目
2022.2.19双周周赛的第四题统计数组中好三元组数目,翻车了,题目要求可点击链接直接查看,当时的思路只想到把nums2映射成[0,1,2,...,n-1]的数组,然后nums1根据相同映射规则也进行改变,然后求nums1中满足x
class Solution {
public:
vector tree;
int lowbit(int x)
{
return x&(-x);
}
void update(int i, int n)
{
while(i <= n)
{
tree[i] += 1;
i += lowbit(i);
}
}
long long getsum(int i)
{
long long res = 0;
while(i > 0)
{
res += tree[i];
i -= lowbit(i);
}
return res;
}
long long goodTriplets(vector& nums1, vector& nums2) {
int n = nums1.size();
tree.resize(n+1);
vector pos(n);
for(int i = 0; i < n; ++i)
{
pos[nums2[i]] = i;
}
for(int i = 0; i < n; ++i)
{
nums1[i] = pos[nums1[i]] + 1;
}
update(nums1[0], n);
long long ans = 0;
for(int i = 1; i < n - 1; ++i)
{
long long less = getsum(nums1[i]);
ans += less * (n - nums1[i] - (i - less));
update(nums1[i], n);
}
return ans;
}
};