QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#409133#8282. Mirrors.5 ulp (Maxim Plyushkin, Egor Belousov, Maxim Inyutin)#WA 36ms519424kbC++202.6kb2024-05-11 19:29:192024-05-11 19:29:19

Judging History

This is the latest submission verdict.

  • [2024-05-11 19:29:19]
  • Judged
  • Verdict: WA
  • Time: 36ms
  • Memory: 519424kb
  • [2024-05-11 19:29:19]
  • Submitted

answer

#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using pl = pair<ll, ll>;
constexpr ll mod = 998244353;
constexpr ll INF = 1e15 + 7;
constexpr ll LOG = 22;
constexpr ll N = 5e5 + 50;

ll nxt[2][N][LOG];
pl val[2][N][LOG];

int main() {
    cin.tie(0)->sync_with_stdio(false);
    for (ll i = 0; i < 2; ++i) {
        for (ll j = 0; j < N; ++j) {
            for (ll k = 0; k < LOG; ++k) {
                nxt[i][j][k] = -1;
                val[i][j][k] = {-INF, INF};
            }
        }
    }
    auto check = [](pl x) {
        return x.first < x.second;
    };
    auto chmin = [](auto &x, auto y) {
        x = min(x, y);
    };
    auto chmax = [](auto &x, auto y) {
        x = max(x, y);
    };
    ll n;
    cin >> n;
    vector<ll> a(n);
    for (auto &i: a)cin >> i;
    ll inc = -1, dec = -1;
    ll res = 0;
    for (ll i = 0; i < n; ++i) {
        if (i && a[i] <= a[i - 1]) {
            inc = i - 1;
        }
        if (i && a[i] >= a[i - 1]) {
            dec = i - 1;
        }
        nxt[0][i][0] = inc;
        chmin(val[0][i][0].second, ~inc ? a[inc] + a[inc + 1] : INF);
        nxt[1][i][0] = dec;
        chmax(val[1][i][0].first, ~dec ? a[dec] + a[dec + 1] : -INF);
        for (ll j = 1; j < LOG; ++j) {
            for (ll id = 0; id < 2; ++id) {
                auto it = nxt[id][i][j - 1];
                auto v = val[id][i][j - 1];
                if (~it) {
                    nxt[id][i][j] = nxt[j == 1 ? 1 ^ id : id][it][j - 1];
                    val[id][i][j] = v;
                    chmax(val[id][i][j].first, val[j == 1 ? id ^ 1 : id][it][j - 1].first);
                    chmin(val[id][i][j].second, val[j == 1 ? id ^ 1 : id][it][j - 1].second);
                } else {
                    nxt[id][i][j] = it;
                    val[id][i][j] = v;
                }
            }
        }
        ll best = i;
        for (ll id = 0; id < 2; ++id) {
            ll cur = i;
            pl now = {-INF, INF};
            ll z = id;
            for (ll j = LOG - 1; ~j && ~cur; --j) {
                auto nw = pl{max(now.first, val[id][cur][j].first), min(now.second, val[id][cur][j].second)};
                if (check(nw)) {
                    now = nw;
                    cur = nxt[id][cur][j];
                    z ^= (j == 0);
                }
            }
            if (~cur) {
                cur = nxt[z][cur][0];
            }
            best = min(best, cur);
        }
        res += i - best - 1;
//        cout << best << "\n";
    }
    cout << res;
}


Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 19ms
memory: 519424kb

input:

2
2 1

output:

1

result:

ok 1 number(s): "1"

Test #2:

score: -100
Wrong Answer
time: 36ms
memory: 519168kb

input:

10
2 2 2 2 1 4 5 3 3 2

output:

18

result:

wrong answer 1st numbers differ - expected: '20', found: '18'