Submission #1254429

#TimeUsernameProblemLanguageResultExecution timeMemory
1254429dostsXylophone (JOI18_xylophone)C++20
100 / 100
26 ms436 KiB
#include "xylophone.h"
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
//#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " <<
#define all(x) x.begin(),x.end()
#define big(x) ((int)(x.size()))
using namespace std;
const int MOD = 1e9+7, LIM = 1e6+1, inf = 2e9;

void solve(int N) {
	//eğer oryantasyon aynıysa A[1]..A[3] = A[1]...A[2]+A[2]...A[3]
	//yön değişimlerini biliom
	//2 possible çözüm var
	//ekstra contr bitiriyor
	vi A(N+1,0);
	A[1] = 0;
	int ptr = 1;
	int cur = 0;
	int dir = 1;
	for (int i=2;i<=N;i++) {
		int k = query(ptr,i);
		int d = query(i-1,i);
		if (d+cur == k) cur=k;
		else {
			ptr = i-1;
			cur = d;
			dir = -dir;
		}
		A[i] = A[i-1] +dir*d;
	}
	if (min_element(1+all(A)) > max_element(1+all(A))) {
		for (int i=1;i<=N;i++) A[i] = -A[i];
	}
	int delt = *min_element(1+all(A));
	for (int i=1;i<=N;i++) {
		answer(i,A[i]-delt+1);
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...