Submission #409486

#TimeUsernameProblemLanguageResultExecution timeMemory
409486AmineWeslatiXylophone (JOI18_xylophone)C++14
100 / 100
134 ms424 KiB
#include <bits/stdc++.h>
#include "xylophone.h"
using namespace std;

typedef long long ll;
typedef vector<int>vi;
#define pb push_back
#define sz(v) (int)v.size()
#define all(x) begin(x),end(x)

#define FOR(i,a,b) for(int i=a; i<b; i++)
#define ROF(i,a,b) for(int i=b-1; i>=a; i--)

//-----------------------------------------------------------//

void ckmin(int &x, int y){x=min(x,y);}

int N; 

void solve(int N) {
	::N=N; 
	
	vi dif(N),diff(N);
	FOR(i,1,N){
		dif[i]=query(i,i+1);
		if(i+2<=N) diff[i]=query(i,i+2);
	}

	vi s(N,1);
	FOR(i,3,N+1){
		if(dif[i-1]+dif[i-2]==diff[i-2]) s[i-1]=s[i-2];
		else s[i-1]=-1*s[i-2];
	}

	vi a(N+1);
	a[1]=1;
	FOR(i,1,N){
		a[i+1]=a[i]+dif[i]*s[i];
	}

	int mn_idx=1,mx_idx=1;
	FOR(i,1,N+1){
		if(a[i]<a[mn_idx]) mn_idx=i;
		if(a[i]>a[mx_idx]) mx_idx=i;
	}

	if(mn_idx>mx_idx){
		FOR(i,1,N) s[i]=-s[i];
		FOR(i,1,N){
			a[i+1]=a[i]+dif[i]*s[i];
		}

		mn_idx=1,mx_idx=1;
		FOR(i,1,N+1){
			if(a[i]<a[mn_idx]) mn_idx=i;
			if(a[i]>a[mx_idx]) mx_idx=i;
		}
		assert(mn_idx<mx_idx);
	}

	int mn=1e9;
	FOR(i,1,N+1) ckmin(mn,a[i]);
	FOR(i,1,N+1) a[i]+=1-mn; 


	//FOR(i,1,N+1) cout << a[i] << " "; cout << endl;
	
	FOR(i,1,N+1){
		answer(i,a[i]);
	}

}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...