Submission #1281323

#TimeUsernameProblemLanguageResultExecution timeMemory
1281323Jawad_Akbar_JJPalembang Bridges (APIO15_bridge)C++20
22 / 100
117 ms8204 KiB
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>

using namespace std;
#define int long long

signed main(){
	int k, n, Ans = 0, Sumr = 0, finalAns = 1e17;
	cin>>k>>n;

	vector<pair<int,int>> vec;
	vector<int> pnt;
	for (int i=1;i<=n;i++){
		char a, c;
		int b, d;
		cin>>a>>b>>c>>d;
		if (b > d)
			swap(b, d);

		if (a == c)
			Ans += d - b;
		else{
			vec.push_back({b, d});
			pnt.push_back(b);
			pnt.push_back(d);
			Ans += d - b + 1;
			Sumr += b + 1;
		}
	}

	sort(begin(vec), end(vec));
	sort(begin(pnt), end(pnt));

	finalAns = Ans + Sumr * 2;
	if (k == 1){
		int Rgt = vec.size(), Lft = 0, Suml = 0, id = 0, lst = -1;
		multiset<int> st;

		for (int i : pnt){
			Sumr -= Rgt * (i - lst);
			Suml += Lft * (i - lst);

			while (id < vec.size() and vec[id].first == i)
				st.insert(vec[id].second), id++, Rgt--;

			while (st.size() > 0 and *begin(st) == i)
				Lft++, st.erase(begin(st));
			// cout<<i<<" | "<<Lft<<" "<<Suml<<" | "<<Rgt<<" "<<Sumr<<endl;
			lst = i;
			finalAns = min(finalAns, Ans + (Suml + Sumr) * 2);
		}
		return cout<<finalAns<<endl, 0;
	}
}

/*

1 5
B 0 A 4
B 1 B 3
A 5 B 7
B 2 A 6
B 1 A 7


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