712 2021. 11. 18 20:37:00 Valaki2 Inverzió cpp14 Elfogadva 50/50 458ms 78804 KiB
#include <bits/stdc++.h>
using namespace std;

int n;
vector<int> numbers;
vector<int> values;
vector<int> segtree;

void build(int v, int vl, int vr) {
    if(vl == vr) {
        segtree[v] = vl;
    } else {
        int mid = (vl + vr) / 2;
        build(2 * v, vl, mid);
        build(2 * v + 1, mid + 1, vr);
        segtree[v] = min(segtree[2 * v], segtree[2 * v + 1]);
    }
}

void update(int v, int vl, int vr, int pos) {
    if(vl == vr) {
        segtree[v] = values[vl];
    } else {
        int mid = (vl + vr) / 2;
        if(pos <= mid) {
            update(2 * v, vl, mid, pos);
        } else {
            update(2 * v + 1, mid + 1, vr, pos);
        }
        segtree[v] = min(segtree[2 * v], segtree[2 * v + 1]);
    }
}

int rmq(int v, int vl, int vr, int ql, int qr) {
    if(qr < vl || ql > vr) {
        return 1e9;
    }
    if(vl == ql && vr == qr) {
        return segtree[v];
    }
    int mid = (vl + vr) / 2;
    return min(rmq(2 * v, vl, mid, ql, min(qr, mid)), rmq(2 * v + 1, mid + 1, vr, max(ql, mid + 1), qr));
}

void solve() {
    cin >> n;
    numbers.assign(1 + n, 0);
    values.assign(1 + n, 1e9);
    segtree.assign(1 + 4 * n, 0);
    bool inversion = false;
    for(int i = 1; i <= n; i++) {
        cin >> numbers[i];
        if(i != numbers[i]) {
            inversion = true;
        }
    }
    if(!inversion) {
        cout << "-1\n";
        return;
    }
    build(1, 1, n);
    values[numbers[1]] = 1;
    update(1, 1, n, numbers[1]);
    int ans_dist = 0, ans_left = 0, ans_right = 0;
    for(int i = 2; i <= n; i++) {
        if(numbers[i] == n) {
            continue;
        }
        int pos = rmq(1, 1, n, numbers[i] + 1, n);
        if(i - pos > ans_dist) {
            ans_left = pos;
            ans_right = i;
            ans_dist = i - pos;
        }
        values[numbers[i]] = i;
        update(1, 1, n, numbers[i]);
    }
    cout << ans_left << " " << ans_right << "\n";
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    solve();
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 3ms 1816 KiB
2 Elfogadva 0/0 23ms 4512 KiB
3 Elfogadva 1/1 1ms 2208 KiB
4 Elfogadva 2/2 2ms 2240 KiB
5 Elfogadva 7/7 1ms 2240 KiB
6 Elfogadva 2/2 26ms 4748 KiB
7 Elfogadva 2/2 245ms 29288 KiB
8 Elfogadva 2/2 402ms 32604 KiB
9 Elfogadva 2/2 451ms 35800 KiB
10 Elfogadva 2/2 384ms 39116 KiB
11 Elfogadva 2/2 354ms 42436 KiB
12 Elfogadva 2/2 347ms 45240 KiB
13 Elfogadva 2/2 384ms 49012 KiB
14 Elfogadva 2/2 365ms 52328 KiB
15 Elfogadva 2/2 256ms 55652 KiB
16 Elfogadva 2/2 397ms 59096 KiB
17 Elfogadva 2/2 433ms 62296 KiB
18 Elfogadva 2/2 412ms 65612 KiB
19 Elfogadva 3/3 245ms 68932 KiB
20 Elfogadva 3/3 250ms 72248 KiB
21 Elfogadva 2/2 259ms 75568 KiB
22 Elfogadva 2/2 430ms 78804 KiB
23 Elfogadva 2/2 458ms 78804 KiB
24 Elfogadva 2/2 64ms 78804 KiB