1528: [POI2005]sam-Toy Cars

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 716  Solved: 306
[Submit][Status][Discuss]

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
 
题解:首先猜一个结论,然后贪心,每次拿的时候放回最远的需要玩的玩具,
   这个预处理+堆优化即可。
  1. #include<cstring>
  2. #include<cmath>
  3. #include<cstdio>
  4. #include<algorithm>
  5. #include<iostream>
  6. #include<queue>
  7.  
  8. #define ll long long
  9. #define inf 1000000007
  10. #define N 500007
  11. #define pa pair<int,int>
  12.  
  13. #define Wb putchar(' ')
  14. #define We putchar('\n')
  15. #define rg register int
  16. using namespace std;
  17. inline int read()
  18. {
  19. int x=,f=;char ch=getchar();
  20. while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
  21. while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
  22. return x*f;
  23. }
  24. inline void write(ll x)
  25. {
  26. if(x<) putchar('-'),x=-x;
  27. if (x==) putchar();
  28. int num=;char c[];
  29. while(x) c[++num]=(x%)+,x/=;
  30. while(num) putchar(c[num--]);
  31. }
  32.  
  33. int n,K,p,ans;
  34. int a[N],nxt[N],last[N];
  35. bool mark[N];
  36. priority_queue<pa,vector<pa> >q;
  37.  
  38. int main()
  39. {
  40. n=read();K=read();p=read();
  41. for(int i=;i<=n;i++)last[i]=p+;
  42. for(int i=;i<=p;i++)
  43. a[i]=read();
  44. for(int i=p;i;i--)
  45. {
  46. nxt[i]=last[a[i]];
  47. last[a[i]]=i;
  48. }
  49. for(int i=;i<=p;i++)
  50. {
  51. if(mark[a[i]]){q.push(make_pair(nxt[i],a[i]));continue;}
  52. if(K)
  53. {
  54. ans++;q.push(make_pair(nxt[i],a[i]));
  55. mark[a[i]]=;
  56. K--;
  57. }
  58. else
  59. {
  60. while(mark[q.top().second]==)q.pop();
  61. mark[q.top().second]=;
  62. q.pop();
  63. ans++;q.push(make_pair(nxt[i],a[i]));
  64. mark[a[i]]=;
  65. }
  66. }
  67. write(ans);
  68. }

bzoj 1528 [POI2005]sam-Toy Cars 堆维护+贪心的更多相关文章

  1. BZOJ 1528 [POI2005]sam-Toy Cars(优先队列)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1528 [题目大意] 地上最多可以放k个玩具,现在给出需求顺序, 问最少需要去架子上拿几 ...

  2. P3419 [POI2005]SAM-Toy Cars / SP688 SAM - Toy Cars

    一道很妙的贪心题 题面 我们考虑当我们插入时会面临的两种情况 当地上的玩具,不满 \(k\) 个时,那我们直接放就可以了. 当满了 \(k\) 个的时候,我们就要从地上拿出一个来给当前的腾位置. 这就 ...

  3. Bzoj 1229: [USACO2008 Nov]toy 玩具 题解 三分+贪心

    1229: [USACO2008 Nov]toy 玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 338  Solved: 136[Submit] ...

  4. BZOJ 1229 [USACO2008 Nov]toy 玩具(三分+贪心)

    [题木链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1229 [题目大意] 每天对玩具都有一定的需求ni,每天可以花f价值每条购买玩具, 当天 ...

  5. 【BZOJ 1528】 1528: [POI2005]sam-Toy Cars (贪心+堆)

    1528: [POI2005]sam-Toy Cars Description Jasio 是一个三岁的小男孩,他最喜欢玩玩具了,他有n 个不同的玩具,它们都被放在了很高的架子上所以Jasio 拿不到 ...

  6. bzoj 1537: [POI2005]Aut- The Bus 线段树

    bzoj 1537: [POI2005]Aut- The Bus 先把坐标离散化 设f[i][j]表示从(1,1)走到(i,j)的最优解 这样直接dp::: f[i][j] = max{f[i-1][ ...

  7. BZOJ 1229: [USACO2008 Nov]toy 玩具

    BZOJ 1229: [USACO2008 Nov]toy 玩具 标签(空格分隔): OI-BZOJ OI-三分 OI-双端队列 OI-贪心 Time Limit: 10 Sec Memory Lim ...

  8. 周赛-Toy Cars 分类: 比赛 2015-08-08 15:41 5人阅读 评论(0) 收藏

    Toy Cars time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  9. [UOJ#268]. 【清华集训2016】数据交互[动态dp+可删堆维护最长链]

    题意 给出 \(n\) 个点的树,每个时刻可能出现一条路径 \(A_i\) 或者之前出现的某条路径 \(A_i\) 消失,每条路径有一个权值,求出在每个时刻过后能够找到的权值最大的路径(指所有和该路径 ...

随机推荐

  1. sqli-labs学习笔记 DAY2

    DAY2 sqli-labs lesson 2 手工注入 URL:http://localhost/sqli-labs-master/Less-2/ Parameter:id 注入点检测:id=2;– ...

  2. python—退出ipython3的help()

    退出ipython3的help() 组合键:ctrl+z

  3. Python Pygame (4) 图像的变换

    Pygame中的transform模块可以使得你能够对图像(也就是Surface对象)做各种动作,列如左右上下翻转,按角度转动,放大缩小......,并返回Surface对象.这里列举了transfo ...

  4. Scrum立会报告+燃尽图(十月二十六日总第十七次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...

  5. 第五周PSP作业

    PSP表格: 累积进度条: 折线图: 饼状图:

  6. 对其中的一个特点将NABC的分析结果

    一.题目要求 每一个组员针对其中的一个特点将NABC的分析结果发表博客上(截止日期4月8日晚24:00前). 二.分析结果 特点之一:通讯方便 <渴了么>这个安卓APP特点之一就是通讯方便 ...

  7. 【leetcode】54.Spiral Matrix

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  8. (七)对Jmeter进行参数化的俩种方式

    一.使用CSV Data Set Config: 1.添加CSV Data Set Config: 2.配置参数: Filename:文件名,指保存参数化数据的文件目录,可以相对或者绝对路径. Fil ...

  9. crontab & php实现多进程思路

    <?php $startTime = time(); while(1) { if (time() - $startTime > 600) { exit; } // ... Do SomeT ...

  10. 理解promise 02

    1:promise是什么? 就是(链式)包装的回调函数. 2:语法 new Promise( function(resolve, reject) {...} /* executor */ ); exe ...