제출 #1189939

#제출 시각아이디문제언어결과실행 시간메모리
1189939Panda50OXylophone (JOI18_xylophone)C++20
0 / 100
0 ms400 KiB
#include "xylophone.h"

int A[5005];
int dif[5005];
// A[i] = dif(i, i+1);

void solve(int N) {
    int mx = query(1,N);
    int l = 1, r = N;
    for(int i = 1; i < N; ++i) dif[i] = query(i,i+1);
    while(l < r) { // move l
        if(query(l+1,r) != mx) break;
        ++l;
    }
    while(l < r) { // move r
        if(query(l,r-1) != mx) break;
        --r;
    }

    A[l] = 1;
    A[r] = N;   
    // l , or r is the lowest
    int mx_dif = 0;
    for(int i = l-1; i >= 0; --i) {
        int dif = query(i,l);
        if(dif > mx_dif) {
            mx_dif = dif;
            A[i] = 1 + dif;
        }
        else {
            A[i] = A[i+1] - query(i,i+1);
        }
    }
    mx_dif = 0;
    for(int i = l+1; i < r; ++i) {
        int dif = query(l, i);
        if(dif > mx_dif) {
            mx_dif = dif;
            A[i] = 1 + dif;
        }
        else {
            A[i] = A[i-1] - query(i-1, i);
        }
    }
    
    mx_dif = 0;
    for(int i = r+1; i <= N; ++i) {
        int dif = query(l, i);
        if(dif > mx_dif) {
            mx_dif = dif;
            A[i] = 1 + dif;
        }
        else {
            A[i] = A[i-1] - query(i-1, i);
        }
    }

	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...