博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 1571 眼红的Medusa
阅读量:5150 次
发布时间:2019-06-13

本文共 1169 字,大约阅读时间需要 3 分钟。

洛谷 1571 眼红的Medusa

虽说这道题标签里写明了二分,然而我还是首先想到了map......毕竟map真的是简单好写。

map做法

#include
using namespace std;int n,m;map
v;int a[101000],b[101000];int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) {scanf("%d",&a[i]);} for(int i=1;i<=m;i++) {scanf("%d",&b[i]);v[b[i]]=true;}//建立映射关系 for(int i=1;i<=n;i++) if(v[a[i]]) cout<
<<" ";//如果出现过直接输出}return 0;

不过言归正传,我还是冲着二分来写这道题的,这个二分思路不难想,就是将第二个数组排序(第一个数组与输出顺序有关,不能排序),然后挨个二分第一个数组里的数是否存在于第二个数组就好了,时间复杂度O(nlogn),n<100000,那就不超时啦。

枚举+二分

#include
using namespace std;int n,m;int a[101000],b[101000];bool binary_search(int x){ int l=1,r=m; while (l<=r) { int mid=(l+r)>>1; if (b[mid]==a[x])return 1; if (b[mid-1]
a[x])return 0; if (b[mid]>a[x])r=mid; else l=mid+1; } return 0; }int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=m;i++) scanf("%d",&b[i]); sort(b+1,b+1+m); for(int i=1;i<=n;i++) if(binary_search(i)) printf("%d ",a[i]); return 0;}

 

 

转载于:https://www.cnblogs.com/yanyiming10243247/p/9237916.html

你可能感兴趣的文章
有引用外部jar包时(J2SE)生成jar文件
查看>>
写接口请求类型为get或post的时,参数定义的几种方式,如何用注解(原创)--雷锋...
查看>>
什么是 开发环境、测试环境、生产环境、UAT环境、仿真环境
查看>>
科研需要兴趣和自信
查看>>
【OpenJ_Bailian - 2287】Tian Ji -- The Horse Racing (贪心)
查看>>
Java网络编程--socket服务器端与客户端讲解
查看>>
List_统计输入数值的各种值
查看>>
Cocos2d-x 的“HelloWorld” 深入分析
查看>>
学习笔记-KMP算法
查看>>
学习笔记--树链剖分
查看>>
Timer-triggered memory-to-memory DMA transfer demonstrator
查看>>
跨域问题整理
查看>>
[Linux]文件浏览
查看>>
64位主机64位oracle下装32位客户端ODAC(NFPACS版)
查看>>
获取国内随机IP的函数
查看>>
今天第一次写博客
查看>>
江城子·己亥年戊辰月丁丑日话凄凉
查看>>
IP V4 和 IP V6 初识
查看>>
Spring Mvc模式下Jquery Ajax 与后台交互操作
查看>>
(转)matlab练习程序(HOG方向梯度直方图)
查看>>