Submission #91046

#TimeUsernameProblemLanguageResultExecution timeMemory
91046tincamateiXylophone (JOI18_xylophone)C++14
100 / 100
107 ms724 KiB
#include "xylophone.h"

const int MAX_N = 5000;
int v[1+MAX_N];
int win2[1+MAX_N], win3[1+MAX_N];

void solve(int N) {
	int semn = 1;
	int vmin, pmin, vmax, pmax;
	for(int i = 1; i < N; ++i)
		win2[i] = query(i, i + 1);
	for(int i = 2; i < N; ++i)
		win3[i] = query(i - 1, i + 1);
	
	v[1] = 0;
	v[2] = win2[1];

	for(int i = 3; i <= N; ++i) {
		if(win2[i - 2] + win2[i - 1] != win3[i - 1])
			semn = semn * (-1);
		v[i] = v[i - 1] + semn * win2[i - 1];
	}

	vmin = 1000000000;
	vmax =-1000000000;
	pmin = pmax = 0;

	for(int i = 1; i <= N; ++i) {
		if(v[i] > vmax) {
			vmax = v[i];
			pmax = i;
		}
		if(v[i] < vmin) {
			vmin = v[i];
			pmin = i;
		}
	}

	for(int i = 1; i <= N; ++i) {
		v[i] = v[i] - vmin + 1;
		if(pmin > pmax)
			v[i] = N - v[i] + 1;
		answer(i, v[i]);
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...