1 solutions

  • 0
    @ 2025-11-5 15:00:20

    C :

    #include <stdio.h> 
    int Count(int arr[], int n)  
    {  
        int L = 0, R = 0, max = 0, min = 0, num = 0;  
          
        for (L = 0; L < n; ++L)    //先从[1-n],然后[2-n],[3-n],如此搜索...   
        {   
            max = -1, min = 50001;            
            for (R = L; R < n; ++R)      
            {  
                if (max < arr[R])  //找出区间[L,R]之间的最大和最小值   
                    max = arr[R];  
                if (min > arr[R])  
                    min = arr[R];  
                if (max - min + 1 == R - L + 1)  //判断是否为连号区间数   
                {  
                //  printf("[%d,%d]\n",L,R);     //打印每种情况   
                    ++num;  
                }  
            }  
        }   
        return num;   
    }
    int main()  
    {  
        int arr[50000] = {0}, n = 0, i = 0;  
        scanf("%d",&n);  
        for (i = 0; i < n; ++i)  
            scanf("%d",&arr[i]);  
        printf("%d",Count(arr,n));   //打印连号区间数   
        return 0;  
    }   
    

    C++ :

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<ctime>
    #include<cmath>
    #include<string>
    #include<cstdio>
    using namespace std;
    
    const int N = 50005;
    
    int a[N];
    
    int main()
    {
        int n;
        scanf("%d", &n);
        for(int i = 0; i < n; ++i)
            scanf("%d", &a[i]);
        int ans = n;
        for(int i = 0; i < n; ++i)
        {
            int _max = a[i], _min = a[i];
            for(int j = i + 1; j < n; ++j)
            {
                _max = max(_max, a[j]);
                _min = min(_min, a[j]);
                if(_max - _min == j - i)
                    ++ans;
            }
        }
        printf("%d\n" ,ans);
        return 0;
    }
    
    
    • 1

    Information

    ID
    16315
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By