Submission #654658

#TimeUsernameProblemLanguageResultExecution timeMemory
654658Tuanlinh123Xylophone (JOI18_xylophone)C++17
0 / 100
2 ms208 KiB
#include<bits/stdc++.h>
#include "xylophone.h"
#define ll int
#define ld long double
#define pll pair<ll,ll>
#define mp make_pair
#define pb push_back
#define fi first
#define se second
using namespace std;

ll a[10005];

void solve(ll n)
{
	ll Min=0;
	ll lo=1, hi=n, val=query(1, n);
	while (hi>lo)
	{
		ll mid=(hi+lo+1)/2;
		if (query(mid, n)!=val)
			hi=mid-1;
		else lo=mid;
	}
	Min=lo; a[Min]=1;
	if (Min!=1)
	{
		ll crr=Min, val=query(Min-1, Min);
		a[Min-1]=val+a[crr];
		bool Min_Max=0;
		// 0:Min, 1:Max
		for (ll i=Min-2; i>=1; i--)
		{
			ll val1=query(i, crr);
			if (!Min_Max)
			{
				if (val1!=val)
					a[i]=a[crr]+val1;
				else
				{
					crr=i+1; val1=query(i, crr);
					a[i]=a[crr]-val1;
					Min_Max^=1;
				}
			}
			else
			{
				if (val1!=val)
					a[i]=a[crr]-val1;
				else
				{
					crr=i+1; val1=query(i, crr);
					a[i]=a[crr]+val1;
					Min_Max^=1;
				}
			}
			val=val1;
		}
	}
	if (Min!=n)
	{
		ll crr=Min, val=query(Min, Min+1);
		a[Min+1]=val+a[crr];
		bool Min_Max=0;
		// 0:Min, 1:Max
		for (ll i=Min+2; i<=n; i++)
		{
			ll val1=query(crr, i);
			if (!Min_Max)
			{
				if (val1!=val)
					a[i]=a[crr]+val1;
				else
				{
					crr=i-1; val1=query(crr, i);
					a[i]=a[crr]-val1;
					Min_Max^=1;
				}
			}
			else
			{
				if (val1!=val)
					a[i]=a[crr]-val1;
				else
				{
					crr=i-1; val1=query(crr, i);
					a[i]=a[crr]+val1;
					Min_Max^=1;
				}
			}
			val=val1;
		}
	}
	for (ll 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...