洛谷p1918保龄球

来源:互联网 发布:软件企业投标资质 编辑:程序博客网 时间:2024/05/13 16:25

原题

题目要求找到对应的值,数据范围在10^5内,因此不能循环枚举每一个值判断。

那么就需要一个高效的算法,根据所求在数组内查找相同值,可以使用stl库里的set查询,也可以二分

二分的话要把数据排序,但要对应输出未排序的下标,所以需要用struct来储存一个mark为未排序的下标

#include<iostream>#include<iomanip>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm> using namespace std;int n; int k=0;struct node{    int mark,ball;}a[100001];int cmp(node x,node y){    return x.ball<y.ball;}int erfen(int l,int r){    while(l<=r)    {        int mid=(l+r)/2;        if(k>a[mid].ball) l=mid+1;        else r=mid-1;    }    if(a[l].ball==k) cout<<a[l].mark<<endl;    else cout<<"0"<<endl;}int main(){    cin>>n;        for(int i=1;i<=n;++i)    {        cin>>a[i].ball;        a[i].mark=i;    }    sort(a+1,a+n+1,cmp);    int q;cin>>q;    for(int i=1;i<=q;++i)    {            k=0;        cin>>k;        erfen(1,n);    }    return 0;} 


原创粉丝点击