public static int[] Solve(int[] heights, int[] front) { int n = heights.Length; SegmentTree tree = new SegmentTree(); int[] result = new int[n]; for (int i = 0; i < n; i++) { tree.ChangeCount(heights[i], 1); } for (int i = n - 1; i >= 0; i--) { result[i] = tree.GetValue(i - front[i] + 1); tree.ChangeCount(result[i], -1); } return(result); }