/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 340.0 KiB
#2 Accepted 6ms 1.008 MiB
#3 Accepted 2ms 572.0 KiB
#4 Accepted 6ms 532.0 KiB
#5 Accepted 6ms 788.0 KiB
#6 Accepted 5ms 788.0 KiB
#7 Accepted 4ms 328.0 KiB
#8 Accepted 5ms 532.0 KiB
#9 Accepted 21ms 564.0 KiB
#10 Wrong Answer 4ms 532.0 KiB
#11 Accepted 71ms 6.633 MiB
#12 Accepted 45ms 6.633 MiB

Code

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
using ll = long long;

void solve() {
    int n;
    cin >> n;
    vector<ll> v(n + 2), tmp = {0};
    set<ll> st;
    for(int i = 1; i <= n; i++) {
        cin >> v[i];
        // st.insert(v[i]);
    }
    for(int i = 1; i <= n; ) {
        int j = i + 1;
        while(j <= n && v[i] == v[j]) ++j;
        tmp.push_back(v[i]);
        st.insert(v[i]);
        i = j;
    }
    v = tmp;
    n = int(v.size()) - 1;
    if(n <= 3) {
        cout << "YES" << endl;
        return;
    }
    bool ok = 1;
    ll l = 2, r = n, mn = v[1], mx = v[1];
    while(l <= r) {
        // cout << l << " " << r << endl;
        // for l
        if(!(mn < v[l] && v[l] < mx)) {
            if(v[l] == mn or v[l] == mx) {
                ++l;
                continue;
            }
            if(v[l] < mn) {
                auto it = st.upper_bound(v[l]);
                if(it != st.end() && *it == mn) {
                    mn = v[l];
                    ++l;
                    continue;
                }
            }
            else if(mx < v[l]) {
                auto it = st.upper_bound(mx);
                if(it != st.end() && *it == v[l]) {
                    mx = v[l];
                    ++l;
                    continue;
                }
            }
        }
        if(l > r) break;
        // for r
        if(!(mn < v[r] && v[r] < mx)) {
            if(v[r] == mn or v[r] == mx) {
                --r;
                continue;
            }
            if(v[r] < mn) {
                auto it = st.upper_bound(v[r]);
                if(it != st.end() && *it == mn) {
                    mn = v[r];
                    --r;
                    continue;
                }
            }
            else if(mx < v[r]) {
                auto it = st.upper_bound(mx);
                if(it != st.end() && *it == v[r]) {
                    mx = v[r];
                    --r;
                    continue;
                }
            }
        }
        // t << l << " " << r << endl;
        ok = 0;
        break;
    }
    if(ok) {
        cout << "YES" << endl;
        return;
    }

    ok = 1;
    l = 1, r = n - 1, mn = v[n], mx = v[n];
    while(l <= r) {
        // for l
        if(!(mn < v[l] && v[l] < mx)) {
            if(v[l] == mn or v[l] == mx) {
                ++l;
                continue;
            }
            if(v[l] < mn) {
                auto it = st.upper_bound(v[l]);
                if(it != st.end() && *it == mn) {
                    mn = v[l];
                    ++l;
                    continue;
                }
            }
            else if(mx < v[l]) {
                auto it = st.upper_bound(mx);
                if(it != st.end() && *it == v[l]) {
                    mx = v[l];
                    ++l;
                    continue;
                }
            }
        }
        if(l > r) break;
        // for r
        if(!(mn < v[r] && v[r] < mx)) {
            if(v[r] == mn or v[r] == mx) {
                --r;
                continue;
            }
            if(v[r] < mn) {
                auto it = st.upper_bound(v[r]);
                if(it != st.end() && *it == mn) {
                    mn = v[r];
                    --r;
                    continue;
                }
            }
            else if(mx < v[r]) {
                auto it = st.upper_bound(mx);
                if(it != st.end() && *it == v[r]) {
                    mx = v[r];
                    --r;
                    continue;
                }
            }
        }
        // cout << l <<" " << r << endl;
        ok = 0;
        break;
    }
    if(ok) {
        cout << "YES" << endl;
        return;
    }
    cout << "NO" << endl;
    return;
}

int main() {
    ios::sync_with_stdio(false); cin.tie(0);
    int tc = 1;
    cin >> tc;
    for (int t = 1; t <= tc; t++) {
        // cout << "Case " << t << ": ";
        solve();
    }
    return 0;
}

Information

Submit By
Type
Submission
Problem
P1229 Array of Beauty
Contest
LUCC Presents Intra LU Junior Programming Contest - Replay
Language
C++17 (G++ 13.2.0)
Submit At
2025-09-02 17:34:45
Judged At
2025-09-02 17:34:45
Judged By
Score
96
Total Time
71ms
Peak Memory
6.633 MiB