Submission #115353

#TimeUsernameProblemLanguageResultExecution timeMemory
115353dndhkXylophone (JOI18_xylophone)C++14
0 / 100
3 ms384 KiB
#include "xylophone.h"


int arr[5001];

int zero(int x){
	return (x>0)?x:-x;
}

void solve(int N) {
	int s = 1, e = N, m;
	while(s<e){
		m = (s+e)/2+1;
		if(query(m, N)==N-1)	s = m;
		else	e = m-1;
	}
	arr[s] = 1;
	if(s!=1){
		arr[s-1] = query(s-1, s) + 1;
	}
	for(int i=s-2; i>=1; i--){
		int t = query(i, i+2);
		if(t==zero(arr[i+1]-arr[i+2])){
			int k = query(i, i+1);
			if(arr[i+1]>arr[i+2]){
				arr[i] = arr[i+1] - k;
			}else{
				arr[i] = arr[i+1] + k;
			}
		}else{
			int k = query(i, i+1);
			if(arr[i+1]>arr[i+2]){
				arr[i] = arr[i+1] + k;
			}else{
				arr[i] = arr[i+1] - k;
			}
		}
	}
	if(s!=N){
		arr[s+1] = query(s, s+1) + 1;
	}
	for(int i=s+2; i<=N; i++){
		int t = query(i-2, i);
		if(t==zero(arr[i-1]- arr[i-2])){
			int k = query(i-1, i);
			if(arr[i-1]>arr[i-2]){
				arr[i] = arr[i-1] - k;
			}else{
				arr[i]= arr[i-1] + k;
			}
		}else{
			int k = query(i-1, i);
			if(arr[i-1]>arr[i-2]){
				arr[i] = arr[i-1]+k;
			}else{
				arr[i] = arr[i-1]-k;
			}
		}
	}
	for(int i=1; i<=N; i++){
		answer(i, arr[i]);
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...