【发布时间】:2011-11-08 08:00:40
【问题描述】:
我们有 n 个学生,每个学生都有 cgpa(大学成绩)和 jee rank(入学考试排名)。 对于每个学生,我们必须计算出 cgpa 更好但 jee rank 更差的学生数量。
(x1,y1), (x2,y2) ...(xi,yi)... (xn,yn)
对于每个 i,我们必须计算 no。 j 的其中 xj > xi 和 yj > yi(排名越差,排名越高。)
我可以想出以下 nlogn 算法- 对它们进行递减 cgpa 的排序。 现在从左边开始扫描。 将到目前为止扫描的学生保持在平衡的二叉树中(根据他们的 jee 等级)。 对于下一个学生,通过查询平衡二叉树,找出已经扫描到的排名更高的学生。
我不知道如何保持平衡的 bst,我可以在其中返回 no。 O(logn) 中小于 k 的元素。我们需要保持否。每个节点的子树中的节点数。但是该怎么做呢?
要么提供上述帮助,要么提供不同的算法,也许是 DP。
【问题讨论】:
-
你打算如何找到CGPA更好但成绩更差的学生名单?对我来说这听起来不合逻辑。 CGPA如何与排名成反比?
-
CGPA是指大学的成绩,rank是指所有参加该大学入学考试的学生的排名。两者之间没有任何关系。
-
For the next student, just find out the no of students already scanned with greater rank by querying the balanced binary tree你不能为不同的属性拥有相同的平衡树。 -
@SaeedAmiri 二叉树是不同的。当我以 cgpa 的降序扫描学生时,在计算出 cgpa 更大但排名更差的学生的数量后,我将他添加到二叉树中(保持在 jee 排名上)。
-
@NitinGarg 我的意思是这些是无关紧要的,实际上这两个属性之间没有任何共同问题,而且当你对某些东西进行排序时,实际上你可以在 O(n) 中得到平衡的二叉树,所以排序和平衡 bst 在 O(n) 中是相同的方法,小于 n log n。我的意思是你不能用一个排序列表和 bst 来做到这一点,如果可以的话,你能举例说明一下吗?
标签: algorithm tree dynamic-programming