分配最佳厕所室的算法

时间:2018-06-10 18:30:56

标签: algorithm heapsort binary-heap

从1到n的厕所。一个人可以在厕所预约,并在一定的时间间隔内使用。按照以下规则分配厕所进行预订。

  1. 指定与目前使用的其他厕所相距最远距离的厕所(例如:1至9厕所,如果1和9厕所被占用,则将5分配给下一个预约请求)。
  2. 如果两个厕所的最大差异相同则分配最左边,即其指数较少。(例如:1到9个厕所,目前使用的是1,9,5然后下次预订分配3个)
  3. 对于给定的传入预订和离开序列,找到所分配的所有厕所序列号的总和。

    输入:
    测试用例的第一行T-否(1 <= T <= 10) N个厕所,M个请求(1 <= N,M <= 20,000) M行跟随两个整数 A为请求类型传入/传出预订,B人进行预订的人ID(如果A == 1然后进入预订,A = = 2在使用厕所后离开) (1&lt; = A&lt; = 2,1 =&lt; = B&lt; = 999999)

    示例输入: 1 5 7 1 1 1 2 1 3 1 4 2 1 1 1 1 5 产量:16 说明:N = 5,M = 7.人员1分配到1号厕所,1号人员分配到3号厕所,1号人员分配到厕所号码1。 3,人id为4比2,然后人id 1离开厕所然后人id 1再次预约并分配1并且人Id 5被分配4。 所以最终答案是1 + 5 + 3 + 2 + 1 + 4 = 16.

    我解决这个问题的方法是:创建一个(startRange,endRange,Distance)的最大堆,并从堆中弹出最大距离值。

    if(startRange==1 || endRange==n) {
    assignned accordingly
    }else{
    toilet no is avg = (startRange+endRange)/2
    and pushed (startRange,avg-1,distance) and (avg+1,endRange,distance) into our heap
    }
    

    现在的问题是,如果有人离开厕所,那么如何更新我的堆以合并这些更改。 或者建议是否有其他算法来解决这个问题。

0 个答案:

没有答案