Submission #1326322

#TimeUsernameProblemLanguageResultExecution timeMemory
1326322trungcanSequence (APIO23_sequence)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#define pii pair<int, int>
#define fi first
#define se second

using namespace std;

const int N = 5e5 + 5;

int n, seg[N << 2][2];
int lazy[N << 2], ans;
vector<int> P[N];

void build(int id, int l, int r){
    if (l == r){
        seg[id][0] = seg[id][1] = l;
        return;
    }

    int mid = l + ((r - l) >> 1);

    build(id << 1, l, mid); build((id << 1) | 1, mid + 1, r);

    seg[id][0] = min(seg[id << 1][0], seg[(id << 1) | 1][0]);
    seg[id][1] = max(seg[id << 1][1], seg[(id << 1) | 1][1]);
}

void down(int id){
    int &v = lazy[id];
    seg[id << 1][0] += v; seg[id << 1][1] += v;
    seg[(id << 1) | 1][0] += v; seg[(id << 1) | 1][1] += v;
    lazy[id << 1] += v; lazy[(id << 1) | 1] += v;

    v = 0;
}

void update(int id, int l, int r, int u, int v, int val){
    if (r < u || v < l) return;
    if (u <= l && r <= v){
        seg[id][0] += val;
        seg[id][1] += val;
        lazy[id] += val;
        return;
    }

    if (lazy[id]) down(id);
    int mid = l + ((r - l) >> 1);

    update(id << 1, l, mid, u, v, val);
    update((id << 1) | 1, mid + 1, r, u, v, val);

    seg[id][0] = min(seg[id << 1][0], seg[(id << 1) | 1][0]);
    seg[id][1] = max(seg[id << 1][1], seg[(id << 1) | 1][1]);
}

pii get(int id, int l, int r, int u, int v){
    if (r < u || v < l) return {N, -N};
    if (u <= l && r <= v) return {seg[id][0], seg[id][1]};

    if (lazy[id]) down(id);
    int mid = l + ((r - l) >> 1);

    pii t1 = get(id << 1, l, mid, u, v),
        t2 = get((id << 1) | 1, mid + 1, r, u, v);

    return {min(t1.fi, t2.fi), max(t1.se, t2.se)};
}

bool check(pii x, pii y, int val){
    if (x > y) swap(x, y);
    return y.fi - x.se <= val;
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);

    cin >> n;
    for (int i = 1, x; i <= n; ++i) cin >> x, P[x].push_back(i);

    build(1, 0, n);

    for (int i = 1; i <= n; ++i)
        if ((int)P[i].size()){
            for (int x: P[i])
                update(1, 0, n, x, n, -1);

            int j = 0;
            for (int k = 0; k < (int)P[i].size(); ++k){
                pii cur = get(1, 0, n, 0, P[i][k] - 1);
                j = max(j, k);
                while (j < (int)P[i].size() && check(cur, get(1, 0, n, P[i][j], n), j - k + 1))
                    ++j;
                ans = max(ans, j - k);
            }

            for (int x: P[i])
                update(1, 0, n, x, n, -1);
        }

    cout << ans;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/cc44mBVG.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccr5xISC.o:sequence.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/cc44mBVG.o: in function `main':
grader.cpp:(.text.startup+0x28e): undefined reference to `sequence(int, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status