Submission #1143823

#TimeUsernameProblemLanguageResultExecution timeMemory
1143823lightentheshadowXylophone (JOI18_xylophone)C++20
100 / 100
26 ms496 KiB
#include <bits/stdc++.h>
#include "xylophone.h"
using namespace std;

int cmp2[5005], cmp3[5005], diff[5005], a[5005];

void solve(int n) {
    for (int i = 1; i < n; i++) {
        cmp2[i] = query(i, i + 1);
        if (i + 2 <= n) cmp3[i] = query(i, i + 2);
    }

    diff[1] = cmp2[1];
    for (int i = 2; i < n; i++) {
        diff[i] = cmp2[i];
        if (cmp2[i - 1] + cmp2[i] == cmp3[i - 1]) {
            if (diff[i] * diff[i - 1] < 0) diff[i] *= -1;
        }
        else {
            if (diff[i] * diff[i - 1] > 0) diff[i] *= -1;
        }
    }

    a[1] = 0;
    for (int i = 1; i < n; i++)
        a[i + 1] = a[i] + diff[i];

    int mnPos = min_element(a + 1, a + n + 1) - a, mxPos = max_element(a + 1, a + n + 1) - a;
    if (mnPos > mxPos) {
        for (int i = 1; i <= n; i++)
            a[i] *= -1;
    }

    int x = *min_element(a + 1, a + n + 1);
    for (int i = 1; i <= n; i++)
        a[i] = a[i] - x + 1;

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