제출 #1155716

#제출 시각아이디문제언어결과실행 시간메모리
1155716njoopXylophone (JOI18_xylophone)C++20
100 / 100
26 ms456 KiB
#include "xylophone.h"
#include <bits/stdc++.h>

using namespace std;

int ans[5000], diff[5000], s, t, mn, mnpos, mx, mxpos;

int mul(int x, int y) {
    if(x < y) return 1;
    return -1;
}

void solve(int n) {
    ans[1] = 0;
    ans[2] = query(1, 2);
    diff[2] = ans[2];
    mnpos = 1;
    mxpos = 1;
    for(int i=3; i<=n; i++) {
        s = query(i-2, i);
        t = query(i-1, i);
        diff[i] = t;
        if(s == diff[i-1]) {
            ans[i] = ans[i-1] - t*mul(ans[i-2], ans[i-1]);
        } else if(diff[i-1] + t == s) {
            ans[i] = ans[i-1] + t*mul(ans[i-2], ans[i-1]);
        } else {
            ans[i] = ans[i-1] - t*mul(ans[i-2], ans[i-1]);
        }
        if(ans[i] < mn) {
            mn = ans[i];
            mnpos = i;
        }
        if(ans[i] > mx) {
            mx = ans[i];
            mxpos = i;
        }
    }
    for(int i=1; i<=n; i++) {
        ans[i] += 1-mn;
    }
    if(mnpos > mxpos) {
        for(int i=1; i<=n; i++) {
            ans[i] = n-ans[i]+1;
        }
    }
    for(int i=1; i<=n; i++) {
        answer(i, ans[i]);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...