From 4d38264ad44836b4583f5ef65151a52bb97527f6 Mon Sep 17 00:00:00 2001 From: chayan das <110921638+Chayandas07@users.noreply.github.com> Date: Tue, 15 Apr 2025 22:06:56 +0530 Subject: [PATCH] Create 2179. Count Good Triplets in an Array --- 2179. Count Good Triplets in an Array | 41 +++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 2179. Count Good Triplets in an Array 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; + } +};