洛谷P2249 【深基13.例1】查找(二分+结构体)

在实中夏令营上做的题

原题

AC代码

由于要求给出数字第一次出现位置

纯二分是不行的

查出这个数再一步步向前查找会wa一个点tle一个点

所以我干脆在输入时使用结构体把每个数第一次出现位置记下来,到时候线性查找

此思路AC(看你谷几个热门题解都没有涉及结构体,干脆自己发一篇

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,q;
 4 struct node{
 5     int vail,fir;
 6 }sum[1000005];
 7 int erfen(int l,int r,int q){
 8     while(l<=r){
 9         int mid=(l+r)/2;
10         if(sum[mid].vail==q){
11             return sum[mid].fir;
12         }
13         if(sum[mid].vail<q){
14             l=mid+1;
15         }
16         if(sum[mid].vail>q){
17             r=mid-1;
18         }
19     }
20     return -1;
21 }
22 int main(){
23     scanf("%d%d",&n,&m);
24     for(int i=1;i<=n;i++){
25         scanf("%d",&sum[i].vail);
26         if(sum[i].vail==sum[i-1].vail&&i>1)sum[i].fir=sum[i-1].fir;
27         else sum[i].fir=i;
28     }
29     while(m--){
30         scanf("%d",&q);
31         printf("%d ",erfen(1,n,q));
32     }
33     return 0;
34 }

 

posted @ 2022-08-05 09:57  九州霜  阅读(112)  评论(0编辑  收藏  举报