样例过了,但TLE和WA,求条

P2249 【深基13.例1】查找

MineImpact_QWQ @ 2024-08-13 15:42:42

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    int a[n+3],b[m+3];
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=m;i++) cin>>b[i];
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            if(b[i]==a[j]) {cout<<j<<' ';break;}
            if(j==n&&b[i]!=a[j]) {cout<<-1;break;}
        }
    }
    return 0;
}

by pop_l @ 2024-08-13 15:46:21

二分


by CheeseFunction @ 2024-08-13 15:53:35

介绍一下无敌的二分lower_bound函数,用途是二分查找[L,R)区间的一个值,返回其第一个大于等于它的迭代器,因此你的代码可以是

#include<bits/stdc++.h>
using namespace std;
int sum[1000000];
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++)cin>>sum[i];
    for(int i=0;i<m;i++){
        int x;
        cin>>x;
        int pos = lower_bound(sum,sum+n,x)-sum;
        if(sum[pos]!=x)cout<<"-1"<<' ';
        else cout<<pos+1<<' '; 
    }
}

by MineImpact_QWQ @ 2024-08-13 15:54:13

@pop_l @FearlessWarriors 谢大佬已关此贴结


|