/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Accepted 9ms 9.66 MiB
#2 Accepted 16ms 11.918 MiB
#3 Accepted 9ms 9.77 MiB
#4 Wrong Answer 14ms 10.02 MiB
#5 Wrong Answer 12ms 11.02 MiB

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
const ll N = 1e5 + 7;
vector<ll> tree[4*N];
ll n;

void build(ll node, ll l, ll r, vector<ll> &arr) {
    if (l == r) {
        tree[node] = {arr[l]};
        return;
    }
    ll mid = l + (r - l) / 2;
    build(node*2, l, mid, arr);
    build(node*2+1, mid+1, r, arr);
    tree[node].resize(tree[node*2].size() + tree[node*2+1].size());

    merge(tree[node*2].begin(), tree[node*2].end(),
          tree[node*2+1].begin(), tree[node*2+1].end(),
          tree[node].begin());
}

ll query(ll node, ll l, ll r, ll ql, ll qr, ll low, ll high) {
    if (qr < l || ql > r) return 0;
    if (ql <= l && r <= qr) {
        return upper_bound(tree[node].begin(), tree[node].end(), high) -
               lower_bound(tree[node].begin(), tree[node].end(), low);
    }

    ll mid = l + (r - l) / 2;
    return query(node*2, l, mid, ql, qr, low, high) +
           query(node*2+1, mid+1, r, ql, qr, low, high);
}

bool valid(ll i, ll j, ll mn, ll mx) {
    
    ll cnt = query(1, 1, n, i, j, mn, mx);

    return cnt == 0;
}

bool check(vector<ll> &arr, ll i, ll j, ll mn, ll mx) {
    bool ok = true;

    while (i < j) {

        if (valid(i + 1, j, min(mn, arr[i]), max(mx, arr[i]))) {
            mn = min (mn, arr[i]);
            mx = max (mx, arr[i]);
            i++;
        }
        else if(valid(i, j - 1, min(mn, arr[j]), max(mx, arr[j]))) {
            mn = min (mn, arr[j]);
            mx = max (mx, arr[j]);
            j--;
        }
        else {
            ok = false;
            break;
        }
    }

    return ok;
}

signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    
    ll t = 1;
    cin >> t; 

    while (t--) {
        cin >> n;
        vector<ll> arr(n + 1);

        for (ll i = 1; i <= n; i++) cin >> arr[i];

        build(1, 1, n, arr);

        if (check(arr, 2, n, arr[1], arr[1]) || check(arr, 1, n - 1, arr[n], arr[n])) {
            cout << "YES\n";
        }
        else cout << "NO\n";

    }
}

Information

Submit By
Type
Submission
Problem
P1229 Array of Beauty
Language
C++17 (G++ 13.2.0)
Submit At
2025-09-03 20:54:22
Judged At
2025-09-03 20:54:22
Judged By
Score
30
Total Time
16ms
Peak Memory
11.918 MiB