【POI每日一题 #2】 SAM-Toy Cars

题目链接

取下哪一个玩具由数据而定

这道题关键点就在于把哪一个玩具放回柜子上

关注一个玩具放回后对之后玩具的影响

显然要放回下一次用的时间(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     }
核心部分

猜你喜欢

转载自www.cnblogs.com/hjmmm/p/9189141.html