Description

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

Input

​ n,k,p(1≤k≤n≤100 000, 1≤p≤500 000), 之后p行表示想玩玩具的顺序。

Output

​ 最少的拿玩具的次数。

Sample Input

3 2 7
1
2
3
1
3
1
2

Sample Output

4

​ 一道挺好的贪心题。

​ 挺简单就过了,地上最多放\(k\)个玩具,如果要加入一个新的玩具,那就把下一次出现时间最晚的那个玩具拿走,用堆每次取一个最大出现时间就好了。还有一个注意的点就是:如果有两个相同的玩具,不用把先出现的那个弹走,如果把它弹走会\(Tle\),因为晚出现的那个玩具一定比早出现的那个更优,如果要取出只会取出晚出现的。

​ 还有一个点:一开始有相同的玩具,记得判断一下。

#include <iostream>
#include <cstdio>
#include <cctype>
#include <queue> using namespace std; inline long long read() {
long long s = 0, f = 1; char ch;
while(!isdigit(ch = getchar())) (ch == '-') && (f = -f);
for(s = ch ^ 48;isdigit(ch = getchar()); s = (s << 1) + (s << 3) + (ch ^ 48));
return s * f;
} const int N = 5e5 + 5;
int n, k, p, ans;
int a[N], vis[N], siz[N], last[N];
struct toy {
int id, siz;
toy() {}
toy(int x, int y) { id = x; siz = y; }
friend bool operator < (const toy &a, const toy &b) {
return a.siz < b.siz;
}
} ;
priority_queue <toy> q; void init() {
n = read(); k = read(); p = read();
for(int i = 1;i <= p; i++) a[i] = read();
for(int i = 1;i <= n; i++) last[i] = p + 1;
for(int i = p;i >= 1; i--) {
siz[i] = last[a[i]], last[a[i]] = i;
}
} void work() {
int tmp;
for(tmp = 1; ; tmp++) {
if(vis[a[tmp]]) {
q.push(toy(a[tmp], siz[tmp]));
}
else {
ans++; q.push(toy(a[tmp], siz[tmp]));
vis[a[tmp]] = 1;
}
if(ans == k) break;
}
for(int i = tmp + 1;i <= p; i++) {
if(vis[a[i]]) {
q.push(toy(a[i], siz[i]));
continue;
}
int x = q.top().id;
vis[x] = 0; q.pop();
q.push(toy(a[i], siz[i]));
vis[a[i]] = 1;
ans++;
}
printf("%d", ans);
} int main() { init();
work(); return 0;
}

P3419 [POI2005]SAM-Toy Cars的更多相关文章

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

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

  2. 洛谷 P3419 [POI2005]SAM-Toy Cars

    P3419 [POI2005]SAM-Toy Cars 题目描述 Johnny is a little boy - he is only three years old and enjoys play ...

  3. 周赛-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 ...

  4. Codeforces Round #303 (Div. 2) A. Toy Cars 水题

     A. Toy Cars Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/545/problem ...

  5. A - Toy Cars

    Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Description Little ...

  6. 水题 Codeforces Round #303 (Div. 2) A. Toy Cars

    题目传送门 /* 题意:5种情况对应对应第i或j辆车翻了没 水题:其实就看对角线的上半边就可以了,vis判断,可惜WA了一次 3: if both cars turned over during th ...

  7. [POI2005]Toy Cars

    题目大意: 有n种物品,地上有k个格子,p次操作. 每次操作要求将某一个指定的物品移动到任意一个格子中,同时你可以选择是否将格子中的某一个物品收起来,并消耗1的代价. 如果下达指令时,这个物品刚好在格 ...

  8. 题解 CF545A 【Toy Cars】

    题目传送门 太弱了,只能写写A题的题解 题意 给你一个 $n·n$ 的矩阵,翻车分三种情况: 如果 $a_i,_j=1$ ,记录第 $i$ 辆车 如果 $a_i,_j=2$ ,记录第 $j$ 辆车 如 ...

  9. bzoj1528 sam-Toy Cars(贪心,优先队列)

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

随机推荐

  1. JQuery插件,轻量级表单模型验证(续 二)

    好不容易,有心思,那就把没做完的JQuery轻量级表单验证做完吧 之前做到了空参数验证的,现在增加带参数的验证. 附上html <form id="ValidataForm" ...

  2. 实验03——java十进制转二、八、十六进制;打印'中'的十六进制;进制转换的api

    package cn.tedu.demo; /** * @author 赵瑞鑫 E-mail:1922250303@qq.com * @version 创建时间:2020年7月16日 上午10:22: ...

  3. Linux用C语言模拟‘ls‘命令

    原理 在linux下使用C语言,通过调用Linux系统的目录访问API来实现一个类似于ls命令功能的小程序,主要是可以练习程序对命令的解析和目录API函数的使用. 实现代码 #include < ...

  4. Ubuntu安装海思SDK(转)

    问题 海思SDK安装时,无法运行sdk.unpack 原因 BASH 和 DASH 的问题. Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主 ...

  5. 用Python一键生成炫酷九宫格图片,火了朋友圈

  6. 利用这10个工具,你可以写出更好的Python代码

    我每天都使用这些实用程序来使我的Python代码可显示. 它们是免费且易于使用的. 编写漂亮的Python比看起来难. 作为发布工作流程的一部分,我使用以下工具使代码可显示并消除可避免的错误. 很多人 ...

  7. Docker 阿里镜像

    Docker 配置阿里镜像 Dokcer 拉取镜像非常慢,配置阿里镜像加速. 步骤 首先注册阿里云,找到 "容器镜像服务" --> "镜像加速器" ,复制 ...

  8. 在Springboot中写使用jsp

    jsp其实可以看成一种模板语言,在Springboot中我们同样可以使用jsp.我们可以把引入jsp的过程分为三步: 第一步:POM文件加依赖: <!--引入springboot内嵌的tomca ...

  9. 怎么写简历,简历才不会被丢到非洲&#127757;

    前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 最近的三歪朋友圈可以看到很多的字节.腾讯的同学都 ...

  10. Scala中做简易wordCount

    使用foldLeft函数,实现简易的wordCount import scala.collection.mutable object Demo_019 { def main(args: Array[S ...