제출 #1100141

#제출 시각아이디문제언어결과실행 시간메모리
1100141sssamui무제 (POI11_rot)C++17
36 / 100
1072 ms32460 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
template <class T>
using Tree =
tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

map<int, Tree<int>> plc;

const ll one = 1;

pair<pair<ll, ll>, Tree<int>> solve()
{
	int lf;
	cin >> lf;
	if (lf > 0)
	{
		Tree<int> ans = plc[0];
		ans.insert(lf);
		return { {0, 1}, ans };
	}

	else
	{
		pair<pair<ll, ll>, Tree<int>> lft = solve();
		pair<pair<ll, ll>, Tree<int>> rgt = solve();
		if (lft.second.size() < rgt.second.size()) swap(lft, rgt);
		pair<pair<ll, ll>, Tree<int>> ans = lft;
		ans.first.first += rgt.first.first, ans.first.second += rgt.first.second;
		ll tadd = 0;
		for (int tins : rgt.second) tadd += one * lft.second.order_of_key(tins), ans.second.insert(tins);
		tadd = fmin(tadd, lft.first.second * rgt.first.second - tadd);
		ans.first.first += tadd;
		return ans;
	}
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n;
	cin >> n;
	cout << solve().first.first;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...