제출 #1349821

#제출 시각아이디문제언어결과실행 시간메모리
1349821ahmdnawazXylophone (JOI18_xylophone)C++20
0 / 100
0 ms344 KiB
#include <bits/stdc++.h>
#include "xylophone.h"

using namespace std;

#define ll long long
#define all(x) (x).begin(), (x).end()
#define endl '\n'


static int diff[5001];
static int A[5001];

void solve(int N) {
	for (int i = 1; i <= N; i++)
		A[i] = -1;
	int idx_N = -1;
	int idx_1 = -1;
	int lo = 1;
	int hi = N;
	while (lo <= hi) {
		int mid = (lo + hi) >> 1;
		if (query(1, mid) == N - 1) {
			idx_N = mid;
			hi = mid - 1; 
		} else {
			lo = mid + 1; 
		}
	}
	lo = 1;
	hi = idx_N - 1;
	while (lo <= hi) {
		int mid = (lo + hi) >> 1; 
		if (query(mid, idx_N) == N - 1) {
			idx_1 = mid;
			lo = mid + 1; 
		} else {
			hi = mid - 1;
		}
	}
	A[idx_N] = N;
	A[idx_1] = 1;
	diff[idx_1] = 0;
	for (int i = 1; i <= N; i++) {
		if (i == idx_1) continue;
		if (i > idx_1)
			diff[i] = query(idx_1, i);
		else
			diff[i] = query(i, idx_1);
	}
	for (int j = idx_1 - 1; j >= 1; j--) {
		if (j == idx_N) continue; 
		if (diff[j] == diff[j + 1]) {
			int Q = query(j, j + 1);
			A[j] = A[j + 1] - Q;
		} else {
			A[j] = A[j + 1] + (diff[j] - diff[j + 1]);
		}
	}
	for (int j = idx_1 + 1; j <= N; j++) {
		if (j == idx_N) continue;
		if (diff[j] == diff[j - 1]) {
			int Q = query(j - 1, j);
			A[j] = A[j - 1] - Q; 
		} else {
			A[j] = A[j - 1] + (diff[j] - diff[j - 1]);
		}
	}
	cout << idx_1 << ' ' << idx_N << endl; 
	for (int i = 1; i <= N; i++)
		cout << A[i] << ' ';
	cout << endl;
	for (int 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...