제출 #379523

#제출 시각아이디문제언어결과실행 시간메모리
379523N_o_o_B무제 (POI11_rot)C++14
63 / 100
1093 ms23532 KiB
#include <bits/stdc++.h> namespace std { template <class Fun> class y_combinator_result { Fun fun_; public: template <class T> explicit y_combinator_result(T &&fun) : fun_(std::forward<T>(fun)) {} template <class... Args> decltype(auto) operator()(Args &&... args) { return fun_(std::ref(*this), std::forward<Args>(args)...); } }; template <class Fun> decltype(auto) y_combinator(Fun &&fun) { return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun)); } } // namespace std using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef vector<int> vi; typedef vector<ll> vl; typedef vector<pii> vii; typedef vector<vi> vvi; typedef vector<pll> vll; typedef vector<vl> vvl; #define fori(i, n) for (int i = 0; i < n; i++) #define ford(i, n) for (int i = n - 1; i >= 0; i--) #define rep(i, a, b) for (int i = a; i <= b; i++) #define repd(i, a, b) for (int i = a; i >= b; i--) #define trav(x, a) for (auto &x : a) #define all(x) (x).begin(), (x).end() #define pb push_back #define eb emplace_back #define endl '\n' #define sz(a) (int)(a).size() #define fi first #define se second clock_t time_p = clock(); void time_taken() { time_p = clock() - time_p; cerr << "Time Taken : " << (float)(time_p) / CLOCKS_PER_SEC << "\n"; } const ll mod = 1e9 + 7; const ll INF = 1e18; #include <bits/extc++.h> using namespace __gnu_pbds; template <typename T> using oset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; // s.order_of_key(x) -> Number of elements in s strictly smaller than x // auto it = s.find_by_order(k) -> iterator to the kth smallest element(0-indexed) struct BIT { vector<int> bit; BIT(int n = 1e5 + 6) : bit(n) { } void update(int x, int v) { while (x < int(bit.size())) { bit[x] += v; x += (x & -x); } } int query(int x) { int sum = 0; while (x > 0) { sum += bit[x]; x -= (x & -x); } return sum; } void upd_range(int l, int r, int v) { update(l, v); update(r + 1, -v); } long long query_range(int l, int r) { return query(r) - query(l - 1); } }; int main() { // ios_base::sync_with_stdio(false), cin.tie(nullptr); int n; scanf("%d", &n); array<int, 2> adj[2 * n + 10]; vi sub(2 * n + 10), val(2 * n + 10); BIT b(n + 10); ll ans = 0; int cur = 0; function<int()> read = [&]() -> int { int p; scanf("%d", &p); int me = cur++; val[me] = p; sub[me] = 1; if (p) { return 1; } adj[me][0] = cur; sub[me] += read(); adj[me][1] = cur; sub[me] += read(); return sub[me]; }; read(); function<vi(int, bool)> go = [&](int u, bool keep) -> vi { vi ret; if (val[u]) { if (keep) b.update(val[u], 1); ret.pb(val[u]); return ret; } bool fl = (sub[adj[u][0]] > sub[adj[u][1]]); if (fl) { ll i1 = 0, i2 = 0; auto v1 = go(adj[u][1], false); auto v2 = go(adj[u][0], true); ret = v2; for (int x : v1) { ret.pb(x); int lt = b.query(x); int gt = sz(v2) - lt; i1 += lt; i2 += gt; } for (int x : v1) b.update(x, 1); ans += min(i1, i2); } else { ll i1 = 0, i2 = 0; auto v1 = go(adj[u][0], false); auto v2 = go(adj[u][1], true); ret = v2; for (int x : v1) { ret.pb(x); int lt = b.query(x); int gt = sz(v2) - lt; i1 += lt; i2 += gt; } for (int x : v1) b.update(x, 1); ans += min(i1, i2); } if (!keep) { for (auto x : ret) b.update(x, -1); } return ret; }; go(0, 1); printf("%lld\n", ans); return 0; }

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

rot.cpp: In function 'int main()':
rot.cpp:113:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  113 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
rot.cpp: In lambda function:
rot.cpp:125:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  125 |         scanf("%d", &p);
      |         ~~~~~^~~~~~~~~~
#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...