Submission #1282580

#TimeUsernameProblemLanguageResultExecution timeMemory
1282580Jawad_Akbar_JJXylophone (JOI18_xylophone)C++20
100 / 100
28 ms464 KiB
#include <iostream>
#include "xylophone.h"

using namespace std;
int a[1<<16], q[1<<16];

void solve(int n){
	a[1] = n + n;

	int Min = 1, cur = 1;
	for (int i=1;i<n;i++)
		q[i] = query(i, i+1);

	while (cur < n){
		int d = q[cur], dd;
		if (Min == 1)
			a[cur + 1] = a[cur] + d;
		else
			a[cur + 1] = a[cur] - d;
		if (cur == n - 1)
			break;

		dd = query(cur, cur + 2);
		Min = Min ^ (q[cur] + q[cur+1] != dd);
		cur++;
	}

	int Mn = a[1] - 1, id1, idn;
	for (int i=1;i<=n;i++)
		Mn = min(Mn, a[i] - 1);
	
	for (int i=1;i<=n;i++){
		a[i] -= Mn;

		if (a[i] == 1)
			id1 = i;
		if (a[i] == n)
			idn = i;
	}

	for (int i=1;i<=n;i++)
		answer(i, a[i] + (n + 1 - 2 * a[i]) * (id1 > idn));
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...