• 洛谷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 }
  • 相关阅读:
    JavaScript作用域
    JavaScript数据类型
    CSS页面布局(二)
    CSS页面布局(一)
    CCS界面组件
    JavaScript面向对象设计
    python-序列化与反序列化
    python-常用模块
    python-re模块
    python-匿名函数
  • 原文地址:https://www.cnblogs.com/TFLSc1908lzs/p/16553373.html
Copyright © 2020-2023  润新知