Submission #1147839

#TimeUsernameProblemLanguageResultExecution timeMemory
1147839NewtonabcXylophone (JOI18_xylophone)C++20
100 / 100
27 ms540 KiB
#include "xylophone.h"
#include<bits/stdc++.h>
using namespace std;
int a[5010],b[5010],arr[5010],mn=INT_MAX,mx=INT_MIN,mnidx,mxidx;
bool dif[5010],inc[5010];
//a[i]=query(i,i+1) b[i]=query(i,i+2)
//dif[i]=relation (i,i+1), relation (i+1,i+2) different?
//inc[i]=relation (i,i+1) increase?
void solve(int N) {
	for(int i=1;i<=N-1;i++) a[i]=query(i,i+1);
	for(int i=1;i<=N-2;i++) b[i]=query(i,i+2);
	for(int i=1;i<=N-2;i++) if(a[i]+a[i+1]!=b[i]) dif[i]=true;
	for(int i=2;i<=N-1;i++) inc[i]=inc[i-1]^dif[i-1];
	arr[1]=1;
	for(int i=1;i<=N;i++){
		if(i!=1) arr[i]=arr[i-1]+(inc[i-1]?a[i-1]:-a[i-1]);
		if(mn>arr[i]){
			mn=arr[i];
			mnidx=i;
		}
		if(mx<arr[i]){
			mx=arr[i];
			mxidx=i;
		}
	}
	for(int i=1;i<=N;i++) arr[i]+=(1-mn);
	if(mnidx>mxidx) for(int i=1;i<=N;i++) arr[i]=(N+1)-arr[i];
	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...