标签:复习 int show 分享 splay bsp 细节 blank close
取下哪一个玩具由数据而定
这道题关键点就在于把哪一个玩具放回柜子上
关注一个玩具放回后对之后玩具的影响
显然要放回下一次用的时间(next)最靠后的那一个
算法选择:对于贪心取元素,选择堆
又懒得手写。。。所以用优先队列啦
这里复习一下优先队列吧
还有就是一些算法细节
一个要用的玩具如果本来就在地上的话
需要更新它的next
但是在堆里查找修改很是麻烦(其实是蒟蒻不会
解决方法:
把当前点插入堆
原来的那个点的next肯定是不会再被找到啦
(因为现在找到i 更新完i后 next值大于i的点就有k个
(每次找next最大的 所以肯定不会找到原来的点
但这样就占了个限制内的位置啊
莫方 因为原来的点一定不会被访问 也不会被弹出
所以把它当作空占位的“僵尸点” 把限制k++就好啦
代码:
1 for(int i = 1; i <= p; i++){ 2 if(inq[a[i]]){ 3 q.push(i); 4 m++; continue; 5 } 6 if(q.size() == m){ 7 int tp = q.top(); q.pop(); 8 inq[a[tp]] = 0; 9 } 10 ans++; 11 q.push(i); 12 inq[a[i]] = 1; 13 }
标签:复习 int show 分享 splay bsp 细节 blank close
原文地址:https://www.cnblogs.com/hjmmm/p/9189141.html