80分求助
查看原帖
80分求助
967367
dingjingyi楼主2023/7/21 13:05
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 5;
int n , a[N] , t[N] , ans = -1;
int get(int x[]){
    int res = -1 , len = 1;
    for(int i = 2; i <= n; i++){
        if(x[i] > x[i - 1]) len++;
        else{
            res = max(res , len);
            len = 1;
        }
    }
    return max(res , len);
}
signed main(){
    // freopen("text.in" , "r" , stdin);
    // freopen("ans.txt" , "w" , stdout);
    scanf("%lld" , &n);
    for(int i = 1; i <= n; i++) scanf("%lld" , &a[i]);
    int res = -1 , len = 1 , t[N] = {};
    t[1] = 1;
    for(int i = 2; i <= n; i++){
        if(a[i] > a[i - 1]) t[++len] = i;
        else{
            if(res <= len){
                res = len;
                int b[N] = {};
                memcpy(b , a , sizeof(a));
                b[t[1]] = b[t[2]] - 1;
                ans = max(ans , get(b));
                memcpy(b , a , sizeof(a));
                b[t[res]] = b[t[res - 1]] + 1;
                ans = max(ans , get(b));
                memcpy(b , a , sizeof(a));
                b[t[1] - 1] = b[t[1]] - 1;
                ans = max(ans , get(b));
                memcpy(b , a , sizeof(a));
                b[t[res] + 1] = b[t[res]] + 1;
                ans = max(ans , get(b));
            }
            len = 1;
            t[len] = i;
        }
    }
    res = max(res , len);
    int b[N] = {};
    memcpy(b , a , sizeof(a));
    b[t[1]] = b[t[2]] - 1;
    ans = max(ans , get(b));
    memcpy(b , a , sizeof(a));
    b[t[res]] = b[t[res - 1]] + 1;
    ans = max(ans , get(b));
    memcpy(b , a , sizeof(a));
    b[t[1] - 1] = b[t[1]] - 1;
    ans = max(ans , get(b));
    memcpy(b , a , sizeof(a));
    b[t[res] + 1] = b[t[res]] + 1;
    ans = max(ans , get(b));
    printf("%lld" , ans);
    return 0;
}

WA了两个点

2023/7/21 13:05
加载中...