题目链接:https://vjudge.net/contest/331120#problem/C

题目:你有一部手机,最多显示k个人发的信息,现在收到n条信息,有可能人是相同的人发的。最新的要顶置,当屏幕上显示的人数已经有k个时,

如果此时又新的人发信息,则把显示屏末端的会消失,最新的顶置。

输入:第一行:n,k     n表示短信的条数,k表示屏幕最多显示的人的个数

第二行:有n个数字,分别表示发短信的人,可以相同。

输出:屏幕上的人数 、  最终自顶向下显示在屏幕上的朋友

代码:

#include<iostream>
#include<set>
#include<deque>
using namespace std;
set<int>s;
deque<int>m;
int main() {
 int n,k;
 cin>>n;
 cin>>k;
 for(int i=0; i<n; i++) {
  int j;
  cin>>j;
  if(!s.count(j)) {
   m.push_front(j);
   s.insert(j);
  }
  if(m.size()>k) {
   s.erase(m.back());
   m.pop_back();
  }
 }
 int sum;
 sum=m.size();
 cout<<sum<<endl;
 for(int i=0; i<sum; i++) {
  cout<<m[i]<<" ";
 }
 return 0;
}

输入n k
for(1~n)  循环读入n个朋友
对于每个朋友x
首先用set的count函数set.count(x)判断之前有没有出现过
如果出现过,直接continue跳过,不做任何处理
如果没有出现过,把这个朋友x放入队头deque.push_front(x)
把这个数放入set,set.insert(x) 表示朋友x出现过,然后,
判断deque的size是否大于k,deque.size()
如果大于k,在set中删除deque的队尾那个数,set.erase(deque.back())
然后把deque队尾删除掉,deque.pop_back();
 最后输出deque

原文

The only difference between easy and hard versions are constraints on nn and kk .

You are messaging in one of the popular social networks via your smartphone. Your smartphone can show at most kk most recent conversations with your friends. Initially, the screen is empty (i.e. the number of displayed conversations equals 00 ).

Each conversation is between you and some of your friends. There is at most one conversation with any of your friends. So each conversation is uniquely defined by your friend.

You (suddenly!) have the ability to see the future. You know that during the day you will receive nn messages, the ii -th message will be received from the friend with ID idiidi (1≤idi≤1091≤idi≤109 ).

If you receive a message from idiidi in the conversation which is currently displayed on the smartphone then nothing happens: the conversations of the screen do not change and do not change their order, you read the message and continue waiting for new messages.

Otherwise (i.e. if there is no conversation with idiidi on the screen):

  • Firstly, if the number of conversations displayed on the screen is kk , the last conversation (which has the position kk ) is removed from the screen.
  • Now the number of conversations on the screen is guaranteed to be less than kk and the conversation with the friend idiidi is not displayed on the screen.
  • The conversation with the friend idiidi appears on the first (the topmost) position on the screen and all the other displayed conversations are shifted one position down.

Your task is to find the list of conversations (in the order they are displayed on the screen) after processing all nn messages.

Input

The first line of the input contains two integers nn and kk (1≤n,k≤2⋅105)1≤n,k≤2⋅105) — the number of messages and the number of conversations your smartphone can show.

The second line of the input contains nn integers id1,id2,…,idnid1,id2,…,idn (1≤idi≤1091≤idi≤109 ), where idiidi is the ID of the friend which sends you the ii -th message.

Output

In the first line of the output print one integer mm (1≤m≤min(n,k)1≤m≤min(n,k) ) — the number of conversations shown after receiving all nn messages.

In the second line print mm integers ids1,ids2,…,idsmids1,ids2,…,idsm , where idsiidsi should be equal to the ID of the friend corresponding to the conversation displayed on the position ii after receiving all nn messages.

Examples

Input
7 2
1 2 3 2 1 3 2
Output
2
2 1
Input
10 4
2 3 3 1 1 2 1 2 3 3
Output
3
1 3 2

Note

In the first example the list of conversations will change in the following way (in order from the first to last message):

  • [][] ;
  • [1][1] ;
  • [2,1][2,1] ;
  • [3,2][3,2] ;
  • [3,2][3,2] ;
  • [1,3][1,3] ;
  • [1,3][1,3] ;
  • [2,1][2,1] .

In the second example the list of conversations will change in the following way:

  • [][] ;
  • [2][2] ;
  • [3,2][3,2] ;
  • [3,2][3,2] ;
  • [1,3,2][1,3,2] ;
  • and then the list will not change till the end.

cf 手机短信问题的更多相关文章

  1. Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结

    Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结 1. 验证码的前世今生11.1. 第一代验证码 图片验证码11.2. 第二代验证码  用户操作 ,比如 ...

  2. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 忘记密码功能改进、手机短信、电子邮件

    由于我们的系统接近有100000个用户账户,经常会有忘记密码的时候,用户多了,很小的一个功能,每天都会有很多人在用,每个功能都非常友善,会提高提系统的效率,提高用户体验. 一天最多能返回3次手机短信, ...

  3. C#.NET 大型信息化系统集成快速开发平台 - 手机短信开发接口 4.0

    可以批量发信息给手机,相同的信息发给多个手机号码的效果图 已发送手机短信列表 可以批量发手机的功能,可以把先有的待发信息列表,直接通过批量发送功能发出 这个是设置发送模板公式的功能展示,可以设置发送的 ...

  4. SNF开发平台WinForm之十二-发送手机短信功能调用-金笛-SNF快速开发平台3.3-Spring.Net.Framework

    1.调用前组装参数 2.调用发送信息服务脚本   .调用前组装参数: BaseSendTaskEntity entity = new BaseSendTaskEntity(); entity.Mess ...

  5. 利用java实现的一个发送手机短信的小例子

    今天闲来无事,在微博上看到一个关于用java实现的一个发送手机短信的程序,看了看,写的不太相信,闲的没事,把他整理下来,以后可能用得着 JAVA发送手机短信,流传有几种方法:(1)使用webservi ...

  6. js手机短信按钮倒计时

    /*   120秒手机短信按钮倒计时   */    exports.sendmessage = function (name) {        var second = 120; $(name). ...

  7. C#简单实现发送手机短信

    偶然想起,像编写一个从电脑向手机发送短信的程序,从网上查找到有三种方式:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2) ...

  8. Ios拦截手机短信程序

    引用 1.手机要越狱,没有越狱的话,下面的可以不用看了!  2.IOS 要5.0以上,4.xx的同上  首先,声明下!由于公司移动开发的项目中,需要根据手机的内容进行逻辑处理,也就是要实现手机短信拦截 ...

  9. Android 读取手机短信

    获取android手机短信需要在AndroidManifest.xml加权限: <uses-permission android:name="android.permission.RE ...

随机推荐

  1. 多线程笔记 - disruptor

    disruptor 可以理解为一个生产消费的框架. 具体翻译教程: http://ifeve.com/disruptor-getting-started/ 这个框架从数据上看, 是很强大的. 号称1s ...

  2. jSon和Ajax登录功能,ajax数据交互案例

    ajax实例,检测用户与注册 检测用户名是否被占用: 在用户填写完用户名之后,ajax会异步向服务器发送请求,判断用户名是否存在 首先写好静态页面: index.html <!DOCTYPE h ...

  3. 内网学习之Kerberos协议

    学习了解kerberos协议,有助于我们后期理解黄金票据和白银票据的原理 kerberos协议 kerberos是一种由麻省理工大学提出的一种网络身份验证协议.旨在通过使用密钥加密技术为客户端/服务器 ...

  4. mysql数据库技术1——基本的增删查改的sql语句

    1.数据库语言的分类 DDL:数据库定义语言 data Definition language 用于创建.修改.和删除数据库内的数据结构,如: 1:创建和删除数据库(CREATE DATABASE | ...

  5. Lucene之索引库的维护:添加,删除,修改

    索引添加 Field域属性分类 添加文档的时候,我们文档当中包含多个域,那么域的类型是我们自定义的,上个案例使用的TextField域,那么这个域他会自动分词,然后存储 我们要根据数据类型和数据的用途 ...

  6. SynchronizationContext(同步上下文)综述

    >>返回<C# 并发编程> 1. 概述 2. 同步上下文 的必要性 2.1. ISynchronizeInvoke 的诞生 2.2. SynchronizationContex ...

  7. git rebase -- 能够将分叉的分支重新合并.

    git rebase

  8. 教你如何理解JAVA的I/O类库

    花括号MC(huakuohao-mc):关注JAVA基础编程及大数据,注重经验分享及个人成长. Java 的 I/O 流,说简单也简单,说复杂也复杂.复杂是因为进行一次常规的文件 I/O 操作通常要用 ...

  9. MySQL 8 InnoDB 集群生产部署

    生产部署InnoDB集群 1.先决条件 InnoDB集群使用组复制技术,所以InnoDB中的实例需要满足组复制要求.可以查看MySQL文档中组复制相关的部分,也可以通过AdminAPI提供的dba.c ...

  10. # ConfigureAwait常见问题解答

    原文: https://devblogs.microsoft.com/dotnet/configureawait-faq/ .NET 在七多年前在语言和类库添加了 async/await .在那个时候 ...