Submission #1232634

#TimeUsernameProblemLanguageResultExecution timeMemory
1232634rhm_ganXylophone (JOI18_xylophone)C++20
0 / 100
1 ms408 KiB
#include <bits/stdc++.h>
#include "xylophone.h"
using namespace std;

void solve(int N) {
    vector<int> res(N + 1);

    int l = 1, r = N;
    while (query(l, r - 1) == N - 1) r--;
    while (query(l + 1, r) == N - 1) l++;

    res[l] = 1;
    res[r] = N;

    int mx = 0, id = 0, k = 1e9;
    for (int i = r + 1; i <= N; i++) {
        int x = query(r, i);
        if (x == mx) {
            int y = query(id, i);
            res[i] = k + y;
        }
        else {
            res[i] = N - x;
            mx = max(mx, x);
        }
        if (res[i] < k) {
            k = res[i];
            id = i;
        }
    }

    mx = id = k = 0;
    for (int i = l - 1; i >= 1; i--) {
        int x = query(i, l);
        if (x == mx) {
            int y = query(i, id);
            res[i] = k - y;
        }
        else {
            res[i] = x + 1;
            mx = max(mx, x);
        }
        if (res[i] > k) {
            k = res[i];
            id = i;
        }
    }

    mx = id = k = 0;
    for (int i = l + 1; i < r; i++) {
        int x = query(l, i);
        if (x == mx) {
            int y = query(id, i);
            res[i] = k - y;
        }
        else {
            res[i] = x + 1;
            mx = max(mx, x);
        }
        if (res[i] > k) {
            k = res[i];
            id = i;
        }
    }

    for (int i = 1; i <= N; i++) {
        answer(i, res[i]);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...