Submission #1131478

#TimeUsernameProblemLanguageResultExecution timeMemory
1131478lanplotTeam Contest (JOI22_team)C++20
100 / 100
392 ms32132 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define MAXN (1000005)
int main(){
	ios_base::sync_with_stdio(false);cin.tie(0);
	ll N;
	cin>>N;
	pair<ll,pair<ll,ll> > arr[N]; //X, Y, Z
	set<pair<ll,ll> > sortX, sortY, sortZ;
	for(ll i = 0;i < N;i++){
		cin>>arr[i].first>>arr[i].second.first>>arr[i].second.second;
		sortX.insert({arr[i].first,i});
		sortY.insert({arr[i].second.first,i});
		sortZ.insert({arr[i].second.second,i});
	}
	ll ans = -1e18;
	while(!sortX.empty()){
		ll A = prev(sortX.end())->second;
		ll B = prev(sortY.end())->second;
		ll C = prev(sortZ.end())->second;
		if(A == B || A == C){ //remove A
			auto it1 = sortX.find({arr[A].first,A});
			sortX.erase(it1);
			auto it2 = sortY.find({arr[A].second.first,A});
			sortY.erase(it2);
			auto it3 = sortZ.find({arr[A].second.second,A});
			sortZ.erase(it3);
		}else if(B == C){ //remove B
			auto it1 = sortX.find({arr[B].first,B});
			sortX.erase(it1);
			auto it2 = sortY.find({arr[B].second.first,B});
			sortY.erase(it2);
			auto it3 = sortZ.find({arr[B].second.second,B});
			sortZ.erase(it3);
		}else if(prev(sortX.end())->first == arr[prev(sortY.end())->second].first){ //remove A
			auto it1 = sortX.find({arr[B].first,B});
			sortX.erase(it1);
			auto it2 = sortY.find({arr[B].second.first,B});
			sortY.erase(it2);
			auto it3 = sortZ.find({arr[B].second.second,B});
			sortZ.erase(it3);
		}else if(prev(sortX.end())->first == arr[prev(sortZ.end())->second].first){ //remove A
			auto it1 = sortX.find({arr[C].first,C});
			sortX.erase(it1);
			auto it2 = sortY.find({arr[C].second.first,C});
			sortY.erase(it2);
			auto it3 = sortZ.find({arr[C].second.second,C});
			sortZ.erase(it3);
		}else if(prev(sortY.end())->first == arr[prev(sortX.end())->second].second.first){ //remove B
			auto it1 = sortX.find({arr[A].first,A});
			sortX.erase(it1);
			auto it2 = sortY.find({arr[A].second.first,A});
			sortY.erase(it2);
			auto it3 = sortZ.find({arr[A].second.second,A});
			sortZ.erase(it3);
		}else if(prev(sortY.end())->first == arr[prev(sortZ.end())->second].second.first){ //remove B
			auto it1 = sortX.find({arr[C].first,C});
			sortX.erase(it1);
			auto it2 = sortY.find({arr[C].second.first,C});
			sortY.erase(it2);
			auto it3 = sortZ.find({arr[C].second.second,C});
			sortZ.erase(it3);
		}else if(prev(sortZ.end())->first == arr[prev(sortX.end())->second].second.second){ //remove C
			auto it1 = sortX.find({arr[A].first,A});
			sortX.erase(it1);
			auto it2 = sortY.find({arr[A].second.first,A});
			sortY.erase(it2);
			auto it3 = sortZ.find({arr[A].second.second,A});
			sortZ.erase(it3);
		}else if(prev(sortZ.end())->first == arr[prev(sortY.end())->second].second.second){ //remove C
			auto it1 = sortX.find({arr[B].first,B});
			sortX.erase(it1);
			auto it2 = sortY.find({arr[B].second.first,B});
			sortY.erase(it2);
			auto it3 = sortZ.find({arr[B].second.second,B});
			sortZ.erase(it3);
		}else{
			ans = arr[A].first + arr[B].second.first + arr[C].second.second;
			break;
		}
	}
	if(ans == -1e18) cout<<-1<<'\n';
	else 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...