查找

题源怎么写着递归那么的步履蹒跚呢

题目描述

输入 n 个不超过 10^9 的单调不减的(就是后面的数字不小于前面的数字)非负整数 a1​,a2​,…,an​,然后进行 m 次询问。对于每次询问,给出一个整数 q,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出 −1 。

输入格式

第一行 2 个整数 n 和 m,表示数字个数和询问次数。

第二行 n 个整数,表示这些待查询的数字。

第三行 m 个整数,表示询问这些数字的编号,从 1 开始编号。

输出格式

输出一行,m 个整数,以空格隔开,表示答案。

输入输出样例

输入 #1复制

11 3
1 3 3 3 5 7 9 11 13 15 15
1 3 6

输出 #1复制

1 2 -1 

说明/提示

数据保证,1≤n≤10^6,0≤ai​,q≤10^9,1≤m≤10^5

本题输入输出量较大,请使用较快的 IO 方式。

 

#include<bits/stdc++.h>
using namespace std;
int n,m,mid;
int minn=1000000009;
long long a[1000008]={0},t=0;
void dfs(int t,int L,int R){
	if(L>R){
		if(minn<1000000009){
			cout<<minn<<" " ;
			return ;
		}
		else {
			cout<<-1<<" ";
			return;
		}
		
	}
	if(t==a[mid]){
		minn=min(minn,mid);
	}
	if(t>a[mid]){
		int tmp=mid+1;
		mid=(tmp+R)/2;
		dfs(t,tmp,R);//右半部分 
	}
	if(t<=a[mid]){//需要取到最左边,要等于 
		int tmp1=mid-1;
		mid=(L+tmp1)/2;
		dfs(t,L,tmp1);//左边部分 
	}
}

//int dfs( int l, int r, int t)//这种写法的也完全可以的
//{
//	if (l == r)
//	{
//		if (a[l] == t)
//			return l;
//		else
//			return -1;//最后位置的数与待查询数不相等,说明数列里没有此数
//	}
//	int mid = (l + r) / 2;
//	if (t <= a[mid])
//		dfs(a, l, mid, t);//在左边区域找
//	else
//		dfs(a, mid + 1, r, t);//在右边区域找
//}

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=m;i++){
		cin>>t;
		mid=(n+1)/2;
		minn=1000000009;//每一次这个位置都需要重新赋值一哈 
		dfs(t,1,n);
//		cout<<minn<<" ";
	}
	return 0;
}

 

相关推荐

  1. 查找

    2024-04-04 18:58:02       41 阅读
  2. 查找——顺序查找和折半查找

    2024-04-04 18:58:02       33 阅读
  3. 二分查找.

    2024-04-04 18:58:02       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 18:58:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 18:58:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 18:58:02       87 阅读
  4. Python语言-面向对象

    2024-04-04 18:58:02       96 阅读

热门阅读

  1. Kali Linux介绍

    2024-04-04 18:58:02       33 阅读
  2. 4.3学习计划

    2024-04-04 18:58:02       38 阅读
  3. 34-1 SSRF漏洞 - SSRF服务端请求伪造

    2024-04-04 18:58:02       38 阅读
  4. Node.js 的常用命令

    2024-04-04 18:58:02       36 阅读
  5. 第十一届“图灵杯“NEUQ-ACM程序设计竞赛

    2024-04-04 18:58:02       37 阅读
  6. vue监听键盘回车事件的三种方法

    2024-04-04 18:58:02       37 阅读