wqy的B题

题意:

和一道叫机器翻译的题差不多,不过这道题要难一些,没有规定必须删除最早入队的。

解法:

解法和[POI2005]SAM-Toy Cars这道题差不多,考虑贪心。

每次选取下一次使用最远的点删除。

拿个堆维护一下就好了。

CODE:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue> using namespace std; #define LL long long
#define N 200010 int n,k,a[N],nxt[N],last[N];
priority_queue<pair<int,int> > q,del;
bool vis[N]; int main() {
scanf("%d%d",&n,&k);
for(int i = 1 ; i <= n ; i++) {
scanf("%d",&a[i]);
nxt[last[a[i]]] = i;
last[a[i]] = i;
}
for(int i = 1 ; i <= N ; i++) {
if(last[i]) nxt[last[i]] = n+1;
}
int ans = 0,size = 0;
for(int i = 1 ; i <= n ; i++) {
if(vis[a[i]]) {
del.push(make_pair(i,a[i]));
q.push(make_pair(nxt[i],a[i]));
continue;
}
ans++;
if(size < k) {
vis[a[i]] = 1;
size++;
q.push(make_pair(nxt[i],a[i]));
} else {
while(!q.empty() && !del.empty() && q.top() == del.top()) q.pop(),del.pop();
int num = q.top().second;
q.pop();
vis[num] = 0;
vis[a[i]] = 1;
q.push(make_pair(nxt[i],a[i]));
}
}
printf("%d \n",ans);
//system("pause");
return 0;
}

wqy的B题的更多相关文章

  1. wqy的C题

    wqy的C题 毒瘤! 题意: 你有一张 $ n $ 个点 $ m $ 条边的无向图. 你想在这张图上添加 $ n $ 条有向边,每一条有向边连接两个点 $ u,v $ ,你需要保证 $ u,v $ 在 ...

  2. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  3. 【Java每日一题】20170106

    20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  4. 【Java每日一题】20170105

    20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  5. 【Java每日一题】20170104

    20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  6. 【Java每日一题】20170103

    20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  7. SQL面试笔试经典题(Part 1)

    本文是在Cat Qi的原贴的基础之上,经本人逐题分别在MySql数据库中实现的笔记,持续更新... 参考原贴:http://www.cnblogs.com/qixuejia/p/3637735.htm ...

  8. 刷LeetCode的正确姿势——第1、125题

    最近刷LeetCode比较频繁,就购买了官方的参考电子书 (CleanCodeHandbook),里面有题目的解析和范例源代码,可以省去非常多寻找免费经验分享内容和整理这些资料的时间.惊喜的是,里面的 ...

  9. AWS的SysOps认证考试样题解析

    刚考过了AWS的developer认证,顺手做了一下SysOps的样题.以下是题目和答案. When working with Amazon RDS, by default AWS is respon ...

随机推荐

  1. params关键字应用

    params 是C#中的可变参数, params主要的用处是在给函数传参数的时候用,就是当函数的参数不固定的时候.  关于参数数组,需掌握以下几点. (1)在方法声明中的 params 关键字之后不允 ...

  2. eclipse复制工作空间配置步骤

    多个workspace,把每个workspace的设置共享,省去每次都重新配置一次. 总结一下,复制工作空间配置步骤如下: [最好是在新的workspace创建项目之前操作] 1 使用eclipse新 ...

  3. Vue2.0+elementUI使用echarts插件

    1.npm安装echarts:     $ npm install echarts -S 2.html代码: <template> <div id="chartColumn ...

  4. 简单注册表单--HTML练手项目3【Table】

    [本文为原创,转载请注明出处] 技术[HTML]   布局[Table] 步骤1  划分table布局 步骤2 填充内容 文本框+密码框+单选框+复选框+多行文本域+按钮 <input> ...

  5. vue 钩子函数的初接触

    vue-router的路由钩子函数: 第一种:全局钩子函数. router.beforeEach((to, from, next) => { console.log('beforeEach') ...

  6. SourceTree撤销commit

    参考链接:http://blog.csdn.net/gang544043963/article/details/71511958 重点是:选中提交之前的版本,再进行撤销回退  

  7. Educational Codeforces Round 76 (Rated for Div. 2) D

    D题 原题链接 题意:就是给你n个怪兽有一个属性(攻击力),m个英雄,每个英雄有两种属性(分别为攻击力,和可攻击次数),当安排最好的情况下,最少的天数(每选择一个英雄出战就是一天) 思路:因为怪兽是不 ...

  8. socketserver 多进程、多线程应用实例

    1.线程池,ThreadingTCPServer #coding=utf-8 ''' 可并发,客户端互不影响,可以保持长连接,客户端发送消息 也不要求加 \r\n ''' #线程池(windows 可 ...

  9. Python2和Python3中新式类、经典类(旧式类)的区别

    https://www.jianshu.com/p/6f9d99f7ad54 里面最后一张图应该输出   This is from C

  10. ubuntu 16.04 TLS 安装VNC

    安装 #autocuftsel 用于vnc两段的复制粘贴 sudo apt-get install autocutsel 安装 vncserversudo apt-get install --no-i ...