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"); }
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"); }
/// <summary> /// Huffman compression processor algorithm. /// </summary> public HuffmanStream() { _table = new CodesTable(); _tree = new BitTree(_table); }