Submission #734873

#TimeUsernameProblemLanguageResultExecution timeMemory
734873sandry24Xylophone (JOI18_xylophone)C++17
100 / 100
144 ms380 KiB
#include "xylophone.h"

void solve(int N){
    int diff1[N], diff2[N], A[N];
    for(int i = 0; i < N-1; i++)
        diff1[i] = query(i+1, i+2);
    for(int i = 0; i < N-2; i++)
        diff2[i] = query(i+1, i+3);
    A[0] = 0; A[1] = diff1[0];
    bool diffup = true;
    int maxpos = 1, minpos = 0;
    for(int i = 2; i < N; i++){
        if(diff1[i-2] + diff1[i-1] != diff2[i-2])
            diffup = !diffup;
        A[i] = A[i-1] + diff1[i-1] * (diffup ? 1 : -1);
        if(A[i] > A[maxpos])
            maxpos = i;
        if(A[i] < A[minpos])
            minpos = i;
    }
    if(maxpos < minpos){
        minpos = 1;
        A[1] = -diff1[0];
        bool diffup = false;
        for(int i = 2; i < N; i++){
            if(diff1[i-2] + diff1[i-1] != diff2[i-2])
                diffup = !diffup;
            A[i] = A[i-1] + diff1[i-1] * (diffup ? 1 : -1);
            if(A[i] < A[minpos])
                minpos = i;
        }
    }
    for(int i = 0; i < N; i++)
        answer(i+1, A[i] - A[minpos] + 1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...