Exemplo n.º 1
0
    void Calc()
    {
        int[] a = new int[N];
        for (int i = 0; i < N; i++)
        {
            a[i] = i;
        }
        Array.Sort(a, (x, y) => H[y] - H[x] > 0 ? 1 : (H[y] - H[x] < 0 ? -1 : (W[x] - W[y])));
        BitTree B   = new BitTree(100000);
        int     max = 0;

        for (int i = 0; i < N; i++)
        {
            int g = B.Get(W[a[i]]);
            max = max < g ? g : max;
            B.Set(W[a[i]], g + 1);
        }
        sb.Append(max + "\n");
    }
Exemplo n.º 2
0
    void Calc()
    {
        int N = int.Parse(Console.ReadLine());

        long[]   W   = new long[N];
        string[] str = Console.ReadLine().Split(' ');
        for (int i = 0; i < N; i++)
        {
            W[i] = int.Parse(str[i]);
        }
        const int T = 500001;

        List <int>[] t = new List <int> [T];
        for (int i = 0; i < T; i++)
        {
            t[i] = new List <int>();
        }
        List <int>[] d = new List <int> [N];
        for (int i = 0; i < N; i++)
        {
            d[i] = new List <int>();
        }
        for (int i = 0; i < N; i++)
        {
            str = Console.ReadLine().Split(' ');
            int M = int.Parse(str[0]);
            for (int j = 1; j <= M; j++)
            {
                t[int.Parse(str[j]) / 2].Add(i);
                d[i].Add(int.Parse(str[j]) / 2);
            }
        }
        int[]   c = new int[N];
        BitTree B = new BitTree(T);

        B.Set(0, 0);
        long max = 0;
        long g   = 0;

        for (int i = 1; i < T; i++)
        {
            if (t[i].Count == 0)
            {
                B.Set(g, i);
                continue;
            }
            for (int j = 0; j < t[i].Count; j++)
            {
                if (c[t[i][j]] == 0)
                {
                    B.Add(0, i - 1, W[t[i][j]]);
                }
                else
                {
                    B.Add(d[t[i][j]][c[t[i][j]] - 1], i - 1, W[t[i][j]]);
                }
                c[t[i][j]]++;
            }
            g   = B.Get(0, i - 1);
            max = max > g ? max : g;
            B.Set(g, i);
        }
        max = max > B.Get(0, T - 1) ? max : B.Get(0, T - 1);
        sb.Append(max + "\n");
    }
Exemplo n.º 3
0
 /// <summary>
 /// Huffman compression processor algorithm.
 /// </summary>
 public HuffmanStream()
 {
     _table = new CodesTable();
     _tree  = new BitTree(_table);
 }