File tree Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution
2+ {
3+ public:
4+ using ll = long long;
5+ vector<ll> bit1, bit2;
6+ int n;
7+ void update(vector<ll>& bit, int i, ll val)
8+ {
9+ for (++i; i <= n; i += (i & -i))
10+ bit[i] += val;
11+ }
12+ ll query(const vector<ll>& bit, int i)
13+ {
14+ ll res = 0;
15+ for (++i; i > 0; i -= (i & -i))
16+ res += bit[i];
17+ return res;
18+ }
19+ long long goodTriplets(vector<int>& nums1, vector<int>& nums2)
20+ {
21+ n = nums1.size();
22+ vector<int> pos(n);
23+ for (int i = 0; i < n; ++i)
24+ pos[nums2[i]] = i;
25+ for (int i = 0; i < n; ++i)
26+ nums1[i] = pos[nums1[i]];
27+ bit1.assign(n + 2, 0);
28+ bit2.assign(n + 2, 0);
29+ ll ans = 0;
30+ for (int i = n - 1; i >= 0; --i)
31+ {
32+ int x = nums1[i];
33+ ll val = query(bit1, n - 1) - query(bit1, x);
34+ ll trip = query(bit2, n - 1) - query(bit2, x);
35+ ans += trip;
36+ update(bit2, x, val);
37+ update(bit1, x, 1);
38+ }
39+ return ans;
40+ }
41+ };
You can’t perform that action at this time.
0 commit comments