【BZOJ1528】[POI2005]sam-Toy Cars

Description

Jasio 是一个三岁的小男孩,他最喜欢玩玩具了,他有n 个不同的玩具,它们都被放在了很高的架子上所以Jasio 拿不到它们. 为了让他的房间有足够的空间,在任何时刻地板上都不会有超过k 个玩具. Jasio 在地板上玩玩具. Jasio'的妈妈则在房间里陪他的儿子. 当Jasio 想玩地板上的其他玩具时,他会自己去拿,如果他想玩的玩具在架子上,他的妈妈则会帮他去拿,当她拿玩具的时候,顺便也会将一个地板上的玩具放上架子使得地板上有足够的空间. 他的妈妈很清楚自己的孩子所以他能够预料到Jasio 想玩些什么玩具. 所以她想尽量的使自己去架子上拿玩具的次数尽量的少,应该怎么安排放玩具的顺序呢?

Input

第一行三个整数: n, k, p (1 <= k <= n <= 100.000, 1 <= p <= 500.000), 分别表示玩具的总数,地板上玩具的最多个数以及Jasio 他想玩玩具的序列的个数,接下来p行每行描述一个玩具编号表示Jasio 想玩的玩具.

Output

一个数表示Jasio 的妈妈最少要拿多少次玩具.

Sample Input

3 2 7
1
2
3
1
3
1
2

Sample Output

4

题解:贪心策略:每次将下一次玩的时间最晚的玩具放回去即可。只需要先与处理出每个玩具下一次玩的时间,然后用堆维护即可。

注意:如果当前想玩的玩具已经在地板上了,也要更新堆!

#include <cstdio>
#include <cstring>
#include <iostream>
#include <utility>
#include <queue>
#define mp(A,B) make_pair(A,B)
using namespace std;
typedef pair<int,int> pii;
int n,k,m,siz,ans;
int last[100010],nxt[5000010],p[5000010];
bool inq[100010];
priority_queue<pii> q;
int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
int main()
{
n=rd(),k=rd(),m=rd();
int i;
for(i=1;i<=m;i++) p[i]=rd(),nxt[last[p[i]]]=i,last[p[i]]=i;
for(i=1;i<=n;i++) nxt[last[i]]=1<<30;
for(i=1;i<=m;i++)
{
if(inq[p[i]])
{
q.push(mp(nxt[i],p[i]));
continue;
}
ans++,siz++;
if(siz>k) siz--,inq[q.top().second]=0,q.pop();
inq[p[i]]=1,q.push(mp(nxt[i],p[i]));
}
printf("%d",ans);
return 0;
}

最新文章

  1. Adaboost提升算法从原理到实践
  2. golang sync.WaitGroup bug
  3. java socket 多线程通讯 使用mina作为服务端
  4. xcoj 1208 矩阵
  5. Tomcat内存设置
  6. Android--Content Provider
  7. nginx+keepalived双主高可用负载均衡
  8. 【Cocos2d入门教程一】Cocos2d-x环境搭建
  9. Advanced Data Structures
  10. ural 1356. Something Easier(数论,哥德巴赫猜想)
  11. 【欧拉函数】 poj 2478
  12. 【视频编解码&#183;学习笔记】11. 提取SPS信息程序
  13. 【Linux】排序命令sort
  14. Android测试环境搭建
  15. jvm虚拟机--垃圾回收子系统
  16. hdu 1541
  17. Apache mod_rewrite实现HTTP和HTTPS重定向跳转
  18. 【转】Java自学之路——by马士兵
  19. 通过visual studio修改dll或exe的版本信息
  20. 关于因为git仓库无法克隆的问题;

热门文章

  1. .NET Core 微服务之Polly重试策略
  2. 【CF711C】Coloring Trees(DP)
  3. 微信JSSDK分享功能详解
  4. js-数字渐增到指定的数字,在指定的时间内完成(有动画效果哦)插件jquery.animateNumber.js
  5. man
  6. SG函数学习总结
  7. BT原理分析(转)
  8. javascript --- 对象之间的继承
  9. 利用NSString的Hash方法比较字符串
  10. C++ 用libcurl库进行http通讯网络编程 【转】