diff --git a/2179. Count Good Triplets in an Array b/2179. Count Good Triplets in an Array new file mode 100644 index 0000000..3a3620c --- /dev/null +++ b/2179. Count Good Triplets in an Array @@ -0,0 +1,41 @@ +class Solution +{ +public: + using ll = long long; + vector bit1, bit2; + int n; + void update(vector& bit, int i, ll val) + { + for (++i; i <= n; i += (i & -i)) + bit[i] += val; + } + ll query(const vector& bit, int i) + { + ll res = 0; + for (++i; i > 0; i -= (i & -i)) + res += bit[i]; + return res; + } + long long goodTriplets(vector& nums1, vector& nums2) + { + n = nums1.size(); + 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]]; + bit1.assign(n + 2, 0); + bit2.assign(n + 2, 0); + ll ans = 0; + for (int i = n - 1; i >= 0; --i) + { + int x = nums1[i]; + ll val = query(bit1, n - 1) - query(bit1, x); + ll trip = query(bit2, n - 1) - query(bit2, x); + ans += trip; + update(bit2, x, val); + update(bit1, x, 1); + } + return ans; + } +};