Intervali

U nizu celih brojeva, pronaći dužinu najdužeg intervala takvog da počinje i završava se brojevima koji su jednaki po apsolutnoj vrednosti, ali suprotnog znaka.

Opis ulaza

Sa standradnog ulaza se učitava pozitivan ceo broj \(n\) (\(2 \leq n \leq 10000\)), a zatim i \(n\) celih brojeva koji čine dati niz.

Opis izlaza

Na standardni izlaz ispisati dužinu najdužeg intervala koji zadovoljava uslov zadatka.

Primer

Ulaz

8 -3 2 4 3 1 -2 -1 -4

Izlaz

6

Rešenje

Opis glavnog rešenja

U ovom bloku se opisuje glavno rešenje zadatka.

#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>

using namespace std;

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

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

    unordered_map<int, int> seen;

    int max_len = 0;

    for (int i = 0; i < n; i++) {
        if(seen.find(-a[i]) != seen.end()) {
            max_len = max(max_len, i - seen[-a[i]] + 1);
        }
        if (seen.find(a[i]) == seen.end()) {
            seen[a[i]] = i;
        }
    }

    cout << max_len << endl;

    return 0;
}
#include <iostream>
#include <vector>

using namespace std;

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

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

    int max_len = 0;

    for (int i = 0; i < n - 1; i++) {
        for (int j = i + 1; j < n; j++) {
            if (a[i] == -a[j]) {
                max_len = max(max_len, j - i + 1);
            }
        }
    }

    cout << max_len << endl;

    return 0;
}