Submission #1040613

#TimeUsernameProblemLanguageResultExecution timeMemory
1040613UnforgettableplGrowing Vegetables is Fun 5 (JOI24_vegetables5)C++17
37 / 100
1237 ms29172 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

const int INF = 1e13;

int32_t main(){
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	int n;
	cin >> n;
	vector<int> arr(2*n+1);
	for(int i=1;i<=2*n;i++)cin>>arr[i];
	vector<int> B(n);
	for(int&i:B)cin>>i;
	sort(B.begin(),B.end());
	vector<int> C(n);
	for(int&i:C)cin>>i;
	sort(C.begin(),C.end());
	auto check_support = [&](int x){
		// return a vector of bool of 1..n signifying if it works or not
		// check array against B
		vector<int> works(n+2);
		for(int i=1;i<=n;i++){
			auto it1 = lower_bound(B.begin(),B.end(),arr[i]-x);
			auto it2 = upper_bound(B.begin(),B.end(),arr[i]+x);
			if(it1==it2)continue;
			auto en = it1-B.begin();
			auto st = it2-B.begin()-1;
			works[max(i-st,1ll)]++;
			works[max(min(i-en+1,i+1),1ll)]--;
		}
		for(int i=n+1;i<2*n;i++){
			if(abs(arr[i]-B[2*n-i])>x)continue;
			works[i-n+1]++;
		}
		for(int i=1;i<=n;i++)works[i]+=works[i-1];
		vector<bool> res(n+1);
		for(int i=1;i<=n;i++)res[i]=works[i]==n;
		return res;
	};
	auto actcheck = [&](int x){
		auto t1 = check_support(x);
		swap(B,C);
		vector<int> newarr(2*n+1);
		for(int i=1;i<=n;i++)newarr[i+n]=arr[i];
		for(int i=n+1;i<=2*n;i++)newarr[i-n]=arr[i];
		for(int&i:B)i*=-1;
		for(int&i:newarr)i*=-1;
		reverse(B.begin(),B.end());
		swap(newarr,arr);
		auto t2 = check_support(x);
		swap(newarr,arr);
		reverse(B.begin(),B.end());
		for(int&i:B)i*=-1;
		swap(B,C);
		for(int i=1;i<=n;i++)if(t1[i] and t2[i])return true;
		return false;
	};
	auto check = [&](int x){
		if(actcheck(x))return true;
		swap(B,C);
		if(actcheck(x))return true;
		return false;
	};
	int ans = 0;
	for(int jump=536870912;jump;jump/=2){
		if(!check(jump+ans-1))ans+=jump;
	}
	cout << ans << '\n';
}

#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...