top1编程
← 返回题目
题解

【入门】起止位置

1 条题解

  • 0
    @ 2026-7-28 22:10:15
    #include<bits/stdc++.h>
    using namespace std;
    int a[100100],n,q,k;
    int main() {
    //	freopen("test9.in","r",stdin);
    //	freopen("test9.out","w",stdout);
    	cin>>n>>q;
        for(int i = 1;i <= n;i++){
        	cin>>a[i]; 
    	}
    	int l,r,mid;
    	for(int i = 1;i <= q;i++){
    		cin>>k;
    		//找左右边界
    		l = 1;r = n;
    		//左边界 
    		while(l <= r){
    			mid = (l+r)>>1;
    			if(k <= a[mid]) r = mid - 1;
    			else l = mid + 1; 
    		} 
    		if(a[l] == k) cout<<l<<" ";
    		else cout<<-1<<" ";
    		l = 1;r = n;
    		//右边界
    		while(l <= r){
    			mid = (l+r)>>1;
    			if(k >= a[mid]) l = mid + 1;
    			else r = mid - 1;
    		} 
    		if(a[r] == k) cout<<r<<endl;
    		else cout<<-1<<endl;
    	}
    	return 0;
    }
    
    • 1