4 solutions

  • 1
    @ 2021-12-27 19:38:08

    #简单的二分

    #include<bits/stdc++.h>                 
    using namespace std; 
    #define ll long long ll num[1000005],n,m,x,ans[10005]; 
    void search(int u,int v)//简单二分 
    { 
    	int l=1,r=n,mid; 
    	while(l<r) 
    	{ 
    		mid=(r+l)/2; 
    		if(num[mid]<u) 
    			l=mid+1; 
    		else 
    			r=mid; 
    	} 
    	if(num[l]!=u)//储存数据 
    		ans[v]=-1; 
    	else 
    		ans[v]=l; 
    } 
    int main() 
    { 
    	std::ios::sync_with_stdio(false); 
    	cin>>n>>m; 
    	for(int i=1;i<=n;i++) 
    		cin>>num[i]; 
    	for(int i=1;i<=m;i++) 
    	{ 
    		cin>>x; 
    		search(x,i);// 
    	} 
    	for(int i=1;i<=m;i++) 
    	cout<<ans[i]<<" "; 
    	return 0; 
    }
    • 1
      @ 2021-10-23 18:24:50
      #include <stdio.h>
      int a[1000001],b[1000001],sz[1000001];//a数列,b要询问的数字,sz存待输出的m个结果 
      int f(int mm,int s,int f){//mm要查找的值,s起始下标,f结束下标 
      	int temp=0;
      	while(s<f){
      		temp=(s+f)/2;//取s,f中点 
      		if(mm<=a[temp]) f=temp;
      		else s=temp+1;
      	}
      	if(mm==a[s]) return s+1;
      	else return -1;
      }
      int main(){
      	int n,m;
      	scanf("%d %d",&n,&m);
      	for(int i=0;i<n;i++) scanf("%d",&a[i]);
      	for(int i=0;i<m;i++) scanf("%d",&b[i]);
      	for(int i=0;i<m;i++) sz[i]=f(a,b[i],0,n-1);
      	for(int i=0;i<m;i++) printf("%d ",sz[i]);
      	printf("\n");
      	return 0;
      }
      
      • 0
        @ 2022-4-6 20:09:28
        //lower_bound(a,a+n,flag)-a;大法得问问为什么我没用呢》?
        #include<bits/stdc++.h>
        using namespace std;
        typedef long long ll;
        const int N=1e6+5;
        ll n,m;
        int a[N];
        int y;
        int bs(int *a,int x){
            int l=0;
            int r=n;
            while(l<r){
              int mid=(l+r)>>1;
              if(a[mid]>=x)r=mid;
              else l=mid+1;
            }
            if(a[l]==x)return l+1;
            return -1;
        }
        int main(){
            cin>>n>>m;
            for(int i=0;i<n;i++) cin>>a[i];
            while(m--){
                cin>>y;
                cout<<bs(a,y)<<" ";
            }
            return 0;
        }
        ···
        • 1

        Information

        ID
        139
        Time
        1000ms
        Memory
        256MiB
        Difficulty
        8
        Tags
        # Submissions
        425
        Accepted
        53
        Uploaded By