제출 #469814

#제출 시각아이디문제언어결과실행 시간메모리
469814ljubaXylophone (JOI18_xylophone)C++17
100 / 100
134 ms432 KiB
#include "xylophone.h"
#include <bits/stdc++.h>

using namespace std;

void solve(int N) {
    vector<int> v(N+1), v2(N+1);

    for(int i = 1; i + 1 <= N; ++i) {
        v[i] = query(i, i+1);
    }

    for(int i = 1; i + 2 <= N; ++i) {
        v2[i] = query(i, i+2);
    }

    vector<int> znak(N+1, 1);
    vector<int> konacno(N+1);
    konacno[2] = v[1];

    //znak[2] je 1

    for(int i = 3; i <= N; ++i) {
        znak[i] = znak[i-1];
        if(v[i-2] + v[i-1] != v2[i-2]) {
            znak[i] = znak[i-1] * (-1);
        }
        konacno[i] = konacno[i-1] + znak[i] * v[i-1];
    }

    int mini = 1, maksi = 1;

    for(int i = 2; i <= N; ++i) {
        if(konacno[i] < konacno[mini]) {
            mini = i;
        }
        if(konacno[i] > konacno[maksi]) {
            maksi = i;
        }
    }

    if(mini > maksi) {
        for(int i = 2; i <= N; ++i) {
            znak[i] *= (-1);
            konacno[i] = konacno[i-1] + znak[i] * v[i-1];
        }

        mini = 1;
        for(int i = 2; i <= N; ++i) {
            if(konacno[i] < konacno[mini]) {
                mini = i;
            }
        }
    }

    vector<int> ans(N+1);

    for(int i = 1; i <= N; ++i) {
        ans[i] = (konacno[i] - konacno[mini] + 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...