public int ReversePairs(int[] nums) { SortedSet <long> allNumbers = new SortedSet <long>(); foreach (int num in nums) { allNumbers.Add((long)num); allNumbers.Add(2 * (long)num); } Dictionary <long, int> values = new Dictionary <long, int>(); int index = 0; foreach (var num in allNumbers) { values.Add(num, index); index++; } int res = 0; BIT bit = new BIT(values.Count); for (int i = 0; i < nums.Length; i++) { int left = values[(long)nums[i] * 2]; int right = values.Count - 1; res += bit.Query(right + 1) - bit.Query(left + 1); bit.Update(values[(long)nums[i]] + 1, 1); } return(res); }
static void Main(string [] args) { int [] a = { 3, 6, 1, 7, 2, 8, 4, 9, 10 }; var bit = new BIT(a.Length); bit.Build(a); bit.Print(); Console.WriteLine(bit.Sum(a.Length - 1)); bit.Update(3, 2); Console.WriteLine(bit.Sum(1, 3)); }
static void Main() { Console.WriteLine("I love you"); int [] arr = { 4, 6, 1, 8, 3, 2, 9, 0, 5, 7 }; var bit = new BIT(arr); bit.Display(); Console.WriteLine(); for (int i = 0; i < arr.Length; i++) { Console.Write(bit.Sum(i) + " "); } bit.Update(10, 7); Console.WriteLine(); for (int i = 0; i < arr.Length; i++) { Console.Write(bit.Sum(i) + " "); } Console.Write(bit.Sum(1) - bit.Sum(0)); }