This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define f first
#define s second
#define fore(i,a,b) for(int i = (a), ThxMK = (b); i < ThxMK; ++i)
#define pb push_back
#define all(s) begin(s), end(s)
#define _ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define sz(s) int(s.size())
#define ENDL '\n'
#define vv(type, name, h, ...) vector<vector<type>> name(h, vector<type>(__VA_ARGS__))
#define vvv(type, name, h, w, ...) vector<vector<vector<type>>> name(h, vector<vector<type>>(w, vector<type>(__VA_ARGS__)))
using namespace std;
 
long long gcd(long long a, long long b){ return b? gcd(b, a%b) : a; }
long long lcm(long long a, long long b){ return (!a or !b)? 0 : a * b / gcd(a,b); } 
long long  poww(long long  a, long long b){
	long long res = 1;
	while(b){ 
		if(b%2) res = res * a ; 
		a = a * a;  b>>=1;
	} return res;
}
 
// mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
// int rnd(int n){return uniform_int_distribution<int>(0, n-1)(rng);}
 
template <typename T> static constexpr T inf = numeric_limits<T>::max() / 2;
template<class t,class u>bool mmax(t&a,u b){if(a<b)a=b;return a<b;}
template<class t,class u>bool mmin(t&a,u b){if(b<a)a=b;return b<a;}
template<class t> using vc=vector<t>;
template<class t> using vvc=vc<vc<t>>;
using li = long long;
using vi = vc<int>;
using ii = pair<int,int>;
//  ('-')7
int main(){_
 
	auto solve=[&](){
		int n,k; cin>>k>>n;
		li sum = 0;
		vector<ii>v;
		fore(i,0,n){
			char a,b; int c,d; cin>>a>>c>>b>>d;
			if(a==b)sum+=abs(c-d);
			else{
				sum+=1;
				v.pb({c,d});
			}
		}
		n = sz(v);
		sort(all(v),[&](ii a, ii b){return a.f+a.s<b.f+b.s;});
		priority_queue<int>l;
		priority_queue<int,vi,greater<int>>r;
		li ls = 0, rs = 0;
		auto f=[&](int u){
			int mid = sz(l)?l.top():inf<int>;
			if(u<=mid){
				l.push(u);
				ls+=u;
			}
			else{
				r.push(u);
				rs+=u;
			}
			if(sz(r)+1<sz(l)){
				int nx = l.top(); l.pop();
				r.push(nx);
				ls-=nx;
				rs+=nx;
			}
			else if(sz(r)>sz(l)){
				int nx = r.top(); r.pop();
				l.push(nx);
				rs-=nx; ls+=nx;
			}
		};
		vc<li>pref(n,0);
		vc<li>suf(n,0);
		fore(i,0,n){
			f(v[i].f);
			f(v[i].s);
			pref[i]=rs-ls;
		}
		rs = 0, ls = 0;
		r=priority_queue<int,vi,greater<int>>();
		l = priority_queue<int>();
		for(int i = n-1;i>=0;i--){
			f(v[i].f);
			f(v[i].s);
			suf[i]=rs-ls;
		}
		li sol = pref[n-1];
		if(k==2)fore(i,0,n-1)sol = min(sol,pref[i]+suf[i+1]);
		cout<<sol+sum<<ENDL;
	};
	//int t; cin>>t; while(t--)
	solve();
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |