5 条题解

  • 3
    @ 2026-10-4 9:50:30

    不使用upper_bound函数

    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    const int INF = 0x3f3f3f3f;
    const int N = 1e5 + 10;
    int n , m , cnt , a [N];
    signed main()
    {
    		cin >> n >> m;
    		for (int i = 1; i <= n; i++) cin >> a [i];
    		while ( m-- )
    		{
    			cin >> cnt;
                int l = 1 , r = n , ans = 0;
                while (l <= r)
                {
                    int mid = l + r >> 1;
                    if (cnt >= a [mid])//要查找的值大于当前值
                    {
                        if (a [mid] == cnt)
                            ans = max (ans , mid);
                        l = mid + 1;
                    } 
                    else r = mid - 1;
                }
                if (!ans) cout << "-1\n";
                else cout << ans << "\n";
    		}
    		return 0;
    }
    
    

    使用upper_bound函数

    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    const int INF = 0x3f3f3f3f;
    const int N = 1e5 + 10;
    int n , m , cnt , a [N];
    signed main()
    {
    		cin >> n >> m;
    		for (int i = 1; i <= n; i++) cin >> a [i];
    		while ( m-- )
    		{
    			cin >> cnt;
                if (a [(upper_bound (a + 1 , a + n + 1 , cnt) - a) - 1] != cnt) cout << "-1\n";
    			else cout << (upper_bound (a + 1 , a + n + 1 , cnt) - a) - 1 << "\n" ;
    		}
    		return 0;
    }
    
    
    
    • 0
      @ 2025-9-20 14:15:26
      #include<bits/stdc++.h>
      using namespace std;
      long long a[10000000],n,x,nnn;
      int main(){
          cin >> n >> x;
          for(int i=0; i<n; i++){
              cin >> a[i];
          }
          for(int i=0; i<x; i++){
              int l=0,r=n-1,mid=0,ans=0;
              bool f=0;
              cin >> ans;
              while(l<=r){
                  mid=(l+r)/2;
                  if(a[mid]==ans){
                      f=1;
                      l=mid+1;
                      nnn=mid;
                  }
                  else if(a[mid]<ans){
                      l=mid+1;
                  }
                  else r=mid-1;
              }
              if(f==0){
                  cout << -1 << "\n";
              }
              else cout << nnn+1 << "\n";
          }
          return 0;
      }
      
      • -1
        @ 2026-3-22 15:43:58

        虽然只有一种味,但真的很 鲜~

        向日葵味

        #include<bits/stdc++.h>
        using namespace std;
        int n, m;  
        int a[10000005];  
        int main(){
            cin >> n >> m;  
            for(int i=1; i<=n; i++){
                cin >> a[i];
            }
        
            for(int i=1; i<=m; i++){  
                int ans;  
                cin >> ans;
                int l = 1, r = n, res = -1;  
                while (l <= r) {
                    int mid = (l + r) / 2;
                    if (a[mid] == ans) {
                        res = mid;  
                        /*r = mid - 1;*/l = mid + 1;  
                    } else if (a[mid] < ans) {
                        l = mid + 1;
                    } else {
                        r = mid - 1;
                    }
                }
                cout << res << "\n";  
            }
            return 0;
        }
        
        • -4
          @ 2025-4-22 17:28:37
          #include<bits/stdc++.h>
          using namespace std;
          int main(){
          	int n,m,a[100001],b[100001],c[100005];
          	cin>>n>>m;
          	for(int i=1;i<=n;i++){
          		cin>>a[i];
          	}
          	for(int i=1;i<=m;i++){
          		cin>>b[i];
          		int l=1,r=n,ans=0;	
          	while(l<=r){
          		int mid=(l+r)/2;
          		if(a[mid]==b[i]){
          			ans=mid;
          			l=mid+1;
          		}
          		else if(a[mid]>b[i]){
          			r=mid-1;
          		}
          		else if(a[mid]<b[i]){
          			l=mid+1;
          		}
          	}
          		if(ans==0){
          			c[i]=-1;
          		}
          		else{
          			c[i]=ans;
          		}
          	}
          	for(int i=1;i<=m;i++){
          		cout<<c[i]<<endl;
          	}
          	
          
          	
          	
          	return 0;
          }
          //废物小鸟
          
          
          
          
          • -4
            @ 2024-12-17 16:32:20
            #include<bits/stdc++.h>
            using namespace std;
            int main(){
            	int n,m,a[100001],b[100001],c[100005];
            	cin>>n>>m;
            	for(int i=1;i<=n;i++){
            		cin>>a[i];
            	}
            	for(int i=1;i<=m;i++){
            		cin>>b[i];
            		int l=1,r=n,ans=0;	
            	while(l<=r){
            		int mid=(l+r)/2;
            		if(a[mid]==b[i]){
            			ans=mid;
            			l=mid+1;
            		}
            		else if(a[mid]>b[i]){
            			r=mid-1;
            		}
            		else if(a[mid]<b[i]){
            			l=mid+1;
            		}
            	}
            		if(ans==0){
            			c[i]=-1;
            		}
            		else{
            			c[i]=ans;
            		}
            	}
            	for(int i=1;i<=m;i++){
            		cout<<c[i]<<endl;
            	}
            	
            
            	
            	
            	return 0;
            }
            小鸟
            
            
            • 1

            信息

            ID
            3099
            时间
            1000ms
            内存
            256MiB
            难度
            2
            标签
            递交数
            64
            已通过
            33
            上传者