菜鸟笔记1
第一次使用stl中的函数。
很不幸题目没法复制粘贴,简述题目如下:
输入n个整数,进行m次查找(就是查找程序运行m遍)每次查找找一个数。
题目如下:
输入样例:
第一行 2 个整数 n 和 m,表示数字个数和询问次数。
第二行 n 个整数,表示这些待查询的数字。
第三行 m 个整数,表示询问这些数字的编号,从 1 开始编号。
eg:输入
11 3
1 3 3 3 5 7 9 11 13 15 15
1 3 6
输出
1 2 -1
#include<cstdio>//及时复习,有关stl的问题
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
long long a[1000010];
long long t;
long int n,m;
scanf("%ld%ld",&n,&m);
for(int i=0;i<n;i++)
scanf("%lld",&a[i]);
for(int j=0;j<m;j++)
{
scanf("%lld",&t);
int answer=lower_bound(a,a+n,t)-a;
if(a[answer]!=t)
printf("-1 ");
else
printf("%d ",++answer);//注意输出的是第几个数,而不是再数组中的位位置
}
return 0;
}
简述思想就是利用stl中的函数,可以轻易的查找到那个值,括号中第一个是首地址,逗号,尾地址,逗号,要查找的数据,
返回的是是一个地址,所以注意减a。
这两个函数的作用是二分查找一个数在数组中出现的位置。区别是 upper 返回第一个大于搜索数的位置,而 lower 是第一个大于等于的数的位置。显然这道题用的是 lower。
如果找不到,那么返回last的地址。
附带私货cmp
bool cmp(int a, int b)
{
return a > b;
}
专用于反向
return code;