제출 #763668

#제출 시각아이디문제언어결과실행 시간메모리
763668vjudge1Xylophone (JOI18_xylophone)C++17
100 / 100
99 ms460 KiB
#include <bits/stdc++.h>
#include "xylophone.h"
using namespace std;
#define ll long long
const int maxn = 2e5 + 69;
int ans[maxn],p[maxn],trio[maxn];
int minn,maxx;
void solve(int n){
	for(int i = 1;i<n;i++){
		p[i] = query(i,i+1);
	}
	for(int i = 1;i<n-1;i++){
		trio[i] = query(i,i+2);
	}
	ans[1] = 0;
	ans[2] = p[1];
	for(int i = 3;i<=n;i++){
		if(p[i-1] + p[i-2] == trio[i-2]){
			if(ans[i-1] > ans[i-2]){
				ans[i] = ans[i-1] + p[i-1];
			}else{
				ans[i] = ans[i-1] - p[i-1];
			}
		}else{
			if(ans[i-1] < ans[i-2]){
				ans[i] = ans[i-1] + p[i-1];
			}else{
				ans[i] = ans[i-1] - p[i-1];
			}
		}
	}
	minn = 1,maxx = 1;
	for(int i = 1;i<=n;i++){
		if(ans[i] < ans[minn]){
			minn = i;
		}
		if(ans[i] > ans[maxx]){
			maxx = i;
		}
	}
	ll temp = ans[minn];
	for(int i = 1;i<=n;i++){
		ans[i] = ans[i] - temp + 1;
	}
	if(minn > maxx){
		for(int i = 1;i<=n;i++){
			ans[i] = n - ans[i] + 1;
		}
	}
	for(int i = 1;i<=n;i++) answer(i,ans[i]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...