码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-06-15 23:31:44      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:复习   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     }
核心部分

 

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

标签:复习   int   show   分享   splay   bsp   细节   blank   close   

原文地址:https://www.cnblogs.com/hjmmm/p/9189141.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!