252042026-02-18 12:42:24AblablablaSzorzatország csapata (40 pont)cpp17Accepted 40/4025ms2352 KiB
#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n;
    cin >> n;

    vector<int> alap(n + 2);
    for(int i = 1; i <= n; i++){
        cin >> alap[i];
    }
    alap[0] = alap[n+1] = 0;

    vector<int> kettes(n+3), neg(n+3);
    for(int i = 0; i < n + 2; i++){
        kettes[i + 1] = kettes[i] + (alap[i] == 2 || alap[i] == -2);
        neg[i+1] = neg[i] + (alap[i] < 0);
    }

    vector<int> jobbra(n+2, -1), balra(n+2, -1);
    for(int i = 1; i < n+2; i++){
        if(alap[i] < 0){
            balra[i] = i;
        } else{
            balra[i] = balra[i - 1];
        }
    }

    for(int i = n; i >= 0; i--){
        if(alap[i] < 0){
            jobbra[i] = i;
        } else{
            jobbra[i] = jobbra[i + 1];
        }
    }



    int elozo = 0;
    int ans = 0;
    int a = -1, b = -1;
    int maxi = -3;
    int maxInd = 0;

    for(int i = 1; i <= n+1; i++){
        if(maxi < alap[i] && i <= n){
            maxi = alap[i];
            maxInd = i;
        }


        if(alap[i] == 0){
            if(elozo == i - 1){
                elozo = i;
                continue;
            }

            int kezd = elozo + 1, veg = i - 1;
            int db = neg[veg + 1] - neg[kezd];


            if(db % 2 == 0){
                int akt = kettes[veg+1] - kettes[kezd];

                if(ans <= akt){
                    ans = akt;
                    a = kezd;
                    b = veg;
                }
            } else{
                int elso = jobbra[kezd]+1;
                if(elso <= veg && jobbra[kezd] != -1){
                    assert((neg[veg+1] - neg[elso])%2 == 0);

                    int akt = kettes[veg+1] - kettes[elso];
                    if(ans <= akt){
                        ans = akt;
                        a = elso;
                        b = veg;
                    }
                }

                int hatso = balra[veg] - 1;
                if(kezd <= hatso && balra[veg] != -1){
                    assert((neg[hatso+1] - neg[kezd])%2 == 0);

                    int akt = kettes[hatso+1] - kettes[kezd];
                    if(ans <= akt){
                        ans = akt;
                        a = kezd;
                        b = hatso;
                    }
                }
            }

            elozo = i;
        }
    }

    if(a == -1){
        assert(maxi != -3);
        cout << maxInd << " " << maxInd << "\n";
    } else{
        cout << a << " " << b << "\n";
    }
}
SubtaskSumTestVerdictTimeMemory
base40/40
1Accepted0/01ms316 KiB
2Accepted0/020ms2352 KiB
3Accepted1/11ms316 KiB
4Accepted1/11ms508 KiB
5Accepted1/11ms316 KiB
6Accepted1/11ms344 KiB
7Accepted1/11ms316 KiB
8Accepted2/21ms316 KiB
9Accepted2/21ms508 KiB
10Accepted3/324ms2336 KiB
11Accepted3/321ms2340 KiB
12Accepted3/320ms2336 KiB
13Accepted4/425ms2344 KiB
14Accepted4/420ms2340 KiB
15Accepted4/420ms2344 KiB
16Accepted5/525ms2344 KiB
17Accepted5/520ms2336 KiB