QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#409121#8282. Mirrors.5 ulp (Maxim Plyushkin, Egor Belousov, Maxim Inyutin)#WA 21ms36036kbC++202.5kb2024-05-11 19:16:322024-05-11 19:16:33

Judging History

This is the latest submission verdict.

  • [2024-05-11 19:16:33]
  • Judged
  • Verdict: WA
  • Time: 21ms
  • Memory: 36036kb
  • [2024-05-11 19:16:32]
  • 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 = 1e13 + 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 (int i = 0; i < 2; ++i) {
        for (int k = 0; k < N; ++k) {
            for (int j = 0; j < LOG; ++j) {
                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 (int j = 1; j < LOG; ++j) {
            for (int 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; --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 ^= (1 << j) % 2;
                }
            }
            if (~cur) {
                cur = nxt[z][cur][0];
            }
            best = min(best, cur);
        }
        res += i - best - 1;
    }
    cout << res;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 21ms
memory: 36036kb

input:

2
2 1

output:

1

result:

ok 1 number(s): "1"

Test #2:

score: -100
Wrong Answer
time: 19ms
memory: 34684kb

input:

10
2 2 2 2 1 4 5 3 3 2

output:

18

result:

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