求助满江红

P2249 【深基13.例1】查找

neocoding @ 2024-12-15 21:19:23

作者事先声明:我用的思路可能不太一样

rt,将所有询问离线,使用双指针求解,最后在排序
代码如下

#include <bits/stdc++.h>
using namespace std;
int n,a[1000001],m;
struct num{
    int v,ans,id;
}b[100001]; 
bool cmp1(num x,num y){
    return x.v<y.v;
}
bool cmp2(num x,num y){
    return x.id<y.id;
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=m;i++){
        cin>>b[i].v;
        b[i].id=i;
    }
    sort(b+1,b+m+1,cmp1);
    int i=1,j=1;
    while(i<=n&&j<=m){
        if(a[i]<b[j].v) i++;
        else if(a[i]==b[j].v){
            b[j].ans=i;
            i++,j++;
        }
        else{
            b[j].ans=-1;
            j++;
        }
    }
    for(;j<=m;j++){
        b[j].ans=-1;
    }
    sort(b+1,b+m+1,cmp2);
    for(int i=1;i<=m;i++){
        cout<<b[i].ans<<' ';
    }
    return 0;
}

悬赏一个关注


by wuzebang2009 @ 2024-12-15 21:30:17

不用想那么复杂,按书上写即可,学习二分的模板


by neocoding @ 2024-12-16 18:25:44

@wuzebang2009 会写二分,只是想尝试一些新思路


|