cin,cout之所以效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而下面的语句可以来打消iostream的输入 输出缓存,可以节省许多时间,使效率与scanf与printf相差无几
#include <iostream>
using namespcae std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
// IO
}
这只是C++为了兼容C而采取的保守措施
二分查找:
binary_search(a,a+n,x)
1.头文件
#include<algorithm>
2.功能
在数组中查找某个元素是否存在
函数模板:binary_search(arr[],arr[]+size,index)
参数说明:arr[]:数组首地址
size:数组元素个数
index:需要查找的元素
函数功能: 在数组中以二分法检索的方式查找,若在数组(要求数组元素非递减)中查找到indx元素则真,若查找不到则返回值为假。
存一个打出来的二分模板的博客,讲的真的不错 https://www.cnblogs.com/bofengyu/p/6761389.html
OK,直接上题
链接:https://ac.nowcoder.com/acm/contest/901/A
题目描述
水宝宝的美食街开始营业喽
美食街八大菜肴:烤绿鸟(主食),拔丝QAQ套餐(副食),红烧KMP(主菜),Treap刺身(副菜),油炸内存条(小吃),奶油CPU(甜品),SPFA奶盖(饮品),冰镇机油(饮品)
水宝宝美食街开张第二天,wza神犇来到水宝宝美食街,却被琳琅满目的食品吓住了,他急需知道水宝宝的美食街有没有他想吃的东西
给出n个食物编号,然后有m个询问,每个询问一个整数,询问该整数是否在n个食物编号中出现过,保证编号为正整数
输入描述:
第一行:n
第二行:m
第三行:n个询问的编号
第四行:m个询问的编号
输出描述:
一共m行,若出现则输出"YES",否则输出"NO"
示例1
输入
复制
15
3
4 2 1 6 16 4 41 19 37 40 8 71 34 87 47
2 8 198
输出
复制
YES
YES
NO
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
ll a[1000005];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
ll n, m, x;
cin >> n >> m;
for (int i = 0; i < n; i++) cin >> a[i];
sort(a, a + n);
while (m--)
{
cin >> x;
if (binary_search(a, a + n, x)) puts("YES");
else puts("NO");
}
return 0;
}