제출 #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...