Submission #1040715

#TimeUsernameProblemLanguageResultExecution timeMemory
1040715qwerasdfzxclA Light Inconvenience (CEOI23_light)C++17
100 / 100
801 ms600 KiB
#include "light.h"
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

ll n;
vector<ll> a;

void prepare(){
	n = 1;
	a.push_back(1);
}

vector<ll> rev(vector<ll> v){
	reverse(v.begin(), v.end());
	return v;
}

std::pair<long long, std::vector<long long>> join(long long p){
	n += p;
	vector<ll> b;
	for (auto &x:a) if (x <= n) b.push_back(x);

	a.clear();
	a.push_back(n);
	
	while(true){
		ll t = a.back() - 1 - (n - a.back() + 1);
		if (t <= 1) break;
		ll mn = 4e18;
		for (auto &x:b) if (x + p >= t) mn = min(mn, max(t, x));
		assert(mn < a.back());
		a.push_back(mn);
	}

	a.push_back(1);
	assert(a.size() <= 150);
	return {p, rev(a)};
}

std::pair<long long, std::vector<long long>> leave(long long p){
	n -= p;
	if (n==1) {return {0, {1}};}
	vector<ll> b;
	for (auto &x:a) if (x <= n) b.push_back(x);

	a.clear();
	a.push_back(n);
	
	while(true){
		ll t = a.back() - 1 - (n - a.back() + 1);
		if (t <= 1) break;
		ll mn = 4e18;
		for (auto &x:b) if (x + p >= t) mn = min(mn, max(t, x));
		assert(mn < a.back());
		a.push_back(mn);
	}

	a.push_back(1);
	assert(a.size() <= 150);
	return {p, rev(a)};

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