제출 #1083291

#제출 시각아이디문제언어결과실행 시간메모리
1083291damamilaPalembang Bridges (APIO15_bridge)C++14
100 / 100
80 ms10436 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long

priority_queue<int> lpq;
priority_queue<int, vector<int>, greater<int>> rpq;
int lsum = 0, rsum = 0;

void insrt(int x) {
	int med;
	if (lpq.size()) med = lpq.top();
	else med = 1e9;
	
	if (x <= med) {
		lpq.push(x);
		lsum += x;
	} else {
		rpq.push(x);
		rsum += x;
	}
	
	if (lpq.size() > rpq.size()+1) {
		int tmp = lpq.top();
		lpq.pop();
		rpq.push(tmp);
		lsum -= tmp;
		rsum += tmp;
	}
	
	if (rpq.size() > lpq.size()) {
		int tmp = rpq.top();
		rpq.pop();
		lpq.push(tmp);
		rsum -= tmp;
		lsum += tmp;
	}
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);  
	int k, n;
	cin >> k >> n;
	int m = 0;
	vector<tuple<int, int, int>> num;
	num.push_back({0, 0, 0});
	vector<int> all;
	int ans = 0;
	for (int i = 0; i < n; i++) {
		int a, b;
		char c, d;
		cin >> c >> a >> d >> b;
		if (c == d) {
			ans += abs(b-a);
		} else {
			m++;
			ans++;
			all.push_back(a);
			all.push_back(b);
			num.push_back({a+b, a, b});
		}
	}
	sort(all.begin(), all.end());
	if (k == 1) {
		int x = all[all.size()/2];
		for (int i : all) {
			ans += abs(i-x);
		}
		cout << ans << endl;
	} else {
		sort(num.begin(), num.end());
		//find prefixes
		vector<int> pref(m+1);
		for (int i = 1; i <= m; i++) {
			auto [tot, a, b] = num[i];
			insrt(a);
			insrt(b);
			pref[i] = rsum-lsum;
		}
		//reset arrays
		int res = pref[m];
		while (lpq.size()) lpq.pop();
		while (rpq.size()) rpq.pop();
		rsum = 0, lsum = 0;
		//find suffixes and answer
		for (int i = m; i > 0; i--) {
			auto [tot, a, b] = num[i];
			insrt(a);
			insrt(b);
			res = min(res, rsum-lsum+pref[i-1]);
		}
		cout << res+ans << endl;
	}
}

컴파일 시 표준 에러 (stderr) 메시지

bridge.cpp: In function 'int main()':
bridge.cpp:78:9: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   78 |    auto [tot, a, b] = num[i];
      |         ^
bridge.cpp:90:9: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   90 |    auto [tot, a, b] = num[i];
      |         ^
#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...