Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    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));
    }
Ejemplo n.º 3
0
    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));
    }