57522023-09-16 12:44:40AblablablaFasor (40)cpp17Elfogadva 40/4093ms19988 KiB
#include <bits/stdc++.h>

using namespace std;

struct segTree{
    int meret = 1;
    vector<int> fa;

    void letrehoz(int n){
        while(meret < n){
            meret *= 2;
        }

        fa.assign(2 * meret - 1, 0);
    }

    int epit(int a, int b, int ind){
        if(a == b){
            return fa[ind];
        }

        int k = (a + b) / 2;

        return fa[ind] = max(epit(a, k, 2 * ind + 1), epit(k + 1, b, 2 * ind + 2));
    }

    int keres(int a, int b, int ind, int kezd, int veg){
        if(b < kezd || veg < a){
            return 0;
        } else if(kezd <= a && b <= veg){
            return fa[ind];
        }

        int k = (a + b) / 2;
        return max(keres(a, k, 2 * ind + 1, kezd, veg), keres(k + 1, b, 2 * ind + 2, kezd, veg));
    }
};

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

    segTree fa;
    fa.letrehoz(n);
    vector<int> eredeti(n, 0);

    for(int i = 0; i < n; i++){
        cin >> fa.fa[fa.meret - 1 + i];
        eredeti[i] = fa.fa[fa.meret - 1 + i];
    }

    fa.epit(0, fa.meret - 1, 0);

    for(int i = 0; i < n; i++){
        int maxi = fa.keres(0, fa.meret - 1, 0, max(0, i - k), min(i + k, n));

        if(maxi == eredeti[i]){
            cout << i + 1 << "\n";
            return 0;
        }
    }

    cout << "-1\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base40/40
1Elfogadva0/03ms1944 KiB
2Elfogadva0/06ms2376 KiB
3Elfogadva2/23ms2328 KiB
4Elfogadva2/23ms2536 KiB
5Elfogadva2/22ms2576 KiB
6Elfogadva2/23ms2812 KiB
7Elfogadva2/23ms2936 KiB
8Elfogadva2/23ms3300 KiB
9Elfogadva2/26ms3796 KiB
10Elfogadva2/26ms3840 KiB
11Elfogadva2/26ms3780 KiB
12Elfogadva2/24ms4104 KiB
13Elfogadva2/252ms7352 KiB
14Elfogadva2/246ms7960 KiB
15Elfogadva2/268ms11632 KiB
16Elfogadva2/276ms12852 KiB
17Elfogadva2/279ms14432 KiB
18Elfogadva2/286ms15904 KiB
19Elfogadva2/293ms17288 KiB
20Elfogadva2/230ms15020 KiB
21Elfogadva2/270ms18660 KiB
22Elfogadva2/279ms19988 KiB