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
      @ 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;
      }
      
      • 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;
        }
        
        • -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
            标签
            递交数
            45
            已通过
            25
            上传者