求调,结构体二分
查看原帖
求调,结构体二分
1076681
chenyuran1楼主2025/2/5 15:18

用的是结构体记录每个元素最先出现的位置,然后二分查找

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int MAXN = 1e6+10;
ll a[MAXN];
int cur = 0;
bool flag[MAXN];
struct node{
    int data,pos;
}data_base[MAXN/2];
int bin_s(int targ){
    int l = 0,r = --cur;
    while(l <= r){
        int mid = (l+r)/2;
        if(data_base[mid].data > targ){
            r = mid-1;
        }
        else if(data_base[mid].data < targ){
            l = mid+1;
        }
        else{
            return data_base[mid].pos;
        }
    }
    return -1;
}
int main(){
    int n,m;
    cin>>n>>m;
    for(int i = 1; i <= n; i ++){
        cin>>a[i];
        if(flag[a[i]] == false){
            data_base[cur].data = a[i];
            data_base[cur++].pos = i;
        }
        else{
            continue;
        }
    }
    for(int i = 0; i <= m-1; i ++){
        int findd;
        cin>>findd;
        cout<<bin_s(findd)<<" ";
    }

    return 0;
}

2025/2/5 15:18
加载中...