cs: add «2179. Count Good Triplets in an Array»
URL: https://leetcode.com/problems/count-good-triplets-in-an-array/ Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
parent
80ae33d3d0
commit
02a57cd6f3
1 changed files with 56 additions and 0 deletions
56
cs/count-good-triplets-in-an-array.cs
Normal file
56
cs/count-good-triplets-in-an-array.cs
Normal file
|
@ -0,0 +1,56 @@
|
|||
public class Solution {
|
||||
private class FenwickTree {
|
||||
private int[] tree;
|
||||
|
||||
public FenwickTree(int size) {
|
||||
tree = new int[size + 1];
|
||||
}
|
||||
|
||||
public int this[int i] {
|
||||
get {
|
||||
var res = 0;
|
||||
|
||||
for (++i; i > 0; i -= i & -i) {
|
||||
res += tree[i];
|
||||
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
set {
|
||||
for (++i; i < tree.Length; i += i & -i) {
|
||||
tree[i] += value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public long GoodTriplets(int[] nums1, int[] nums2) {
|
||||
var n = nums1.Length;
|
||||
|
||||
var pos2 = new int[n];
|
||||
for (var i = 0; i < n; ++i) {
|
||||
pos2[nums2[i]] = i;
|
||||
}
|
||||
|
||||
var reversedMapping = new int[n];
|
||||
for (var i = 0; i < n; ++i) {
|
||||
reversedMapping[pos2[nums1[i]]] = i;
|
||||
}
|
||||
|
||||
long count = 0;
|
||||
|
||||
var t = new FenwickTree(n);
|
||||
for (var value = 0; value < n; ++value) {
|
||||
var pos = reversedMapping[value];
|
||||
|
||||
var left = t[pos];
|
||||
t[pos] = 1;
|
||||
|
||||
var right = (n - 1 - pos) - (value - left);
|
||||
count += (long)left * right;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue