151812025-02-15 10:23:52PKBLegtöbbször szomszédok (75 pont)cpp17Accepted 75/7517ms2068 KiB
#include <iostream>
#include <vector>
#include <set>
#include <climits>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, M;
    cin >> N >> M;
    vector<int> pontszam(N+1);
    for (int i = 1; i <= N; i++){
        cin >> pontszam[i];
    }

    int loPont = pontszam[M];

    const int MAXP = 10000;
    vector<int> minVersenyzo(MAXP+1, INT_MAX);

    set<int> beolvasottPontok;

    vector<int> elotteSzamlalo(N+1, 0);
    vector<int> utanaSzamlalo(N+1, 0);

    for (int i = 1; i <= N; i++){
        int aktPont = pontszam[i];
        if(minVersenyzo[aktPont] > i){
            minVersenyzo[aktPont] = i;
            beolvasottPontok.insert(aktPont);
        }

        if(i >= M){
            auto it = beolvasottPontok.lower_bound(loPont + 1);
            if(it != beolvasottPontok.end()){
                int elottePont = *it;
                int elotteVersenyzo = minVersenyzo[elottePont];
                elotteSzamlalo[elotteVersenyzo]++;
            }

            auto it2 = beolvasottPontok.lower_bound(loPont);
            if(it2 != beolvasottPontok.begin()){
                it2--;
                int utanaPont = *it2;
                if(utanaPont < loPont){
                    int utanaVersenyzo = minVersenyzo[utanaPont];
                    utanaSzamlalo[utanaVersenyzo]++;
                }
            }
        }
    }

    int maxElotte = 0, jeloltElotte = -1;
    int maxUtana = 0, jeloltUtana = -1;
    for (int i = 1; i <= N; i++){
        if(i == M) continue;

        if(elotteSzamlalo[i] > maxElotte){
            maxElotte = elotteSzamlalo[i];
            jeloltElotte = i;
        }
        else if(elotteSzamlalo[i] == maxElotte && elotteSzamlalo[i] != 0 && i < jeloltElotte)
            jeloltElotte = i;

        if(utanaSzamlalo[i] > maxUtana){
            maxUtana = utanaSzamlalo[i];
            jeloltUtana = i;
        }
        else if(utanaSzamlalo[i] == maxUtana && utanaSzamlalo[i] != 0 && i < jeloltUtana)
            jeloltUtana = i;
    }

    if(jeloltElotte == -1)
        cout << -1 << "\n";
    else
        cout << jeloltElotte << " " << maxElotte << "\n";

    if(jeloltUtana == -1)
        cout << -1;
    else
        cout << jeloltUtana << " " << maxUtana;

    return 0;
}
SubtaskSumTestVerdictTimeMemory
base75/75
1Accepted0/01ms316 KiB
2Accepted0/014ms1588 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms316 KiB
5Accepted4/41ms316 KiB
6Accepted4/41ms508 KiB
7Accepted3/31ms316 KiB
8Accepted4/41ms316 KiB
9Accepted4/43ms560 KiB
10Accepted4/44ms816 KiB
11Accepted4/44ms816 KiB
12Accepted4/46ms1132 KiB
13Accepted4/46ms1080 KiB
14Accepted4/46ms820 KiB
15Accepted4/46ms940 KiB
16Accepted4/48ms1056 KiB
17Accepted4/48ms1336 KiB
18Accepted4/410ms1332 KiB
19Accepted4/412ms1588 KiB
20Accepted4/412ms1600 KiB
21Accepted4/412ms1592 KiB
22Accepted4/417ms2068 KiB