Submission #636248

#TimeUsernameProblemLanguageResultExecution timeMemory
636248jame0313Untitled (POI11_rot)C++17
9 / 100
37 ms65536 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; using ld = long double; using pll = pair<ll, ll>; // and so on struct bit { int* tree; int siz; vector<int> v; void init(int x) { for (siz = 1; siz < x; siz <<= 1) ; tree = new int[siz + 1]; for (int i = 1; i <= siz; i++) tree[i] = 0; } void add(int pos, int x) { v.push_back(pos); while (pos <= siz) { tree[pos] += x; pos += (pos & -pos); } } int sum(int pos) { int ret = 0; if(pos<=0) return 0; while (pos) { ret += tree[pos]; pos &= (pos - 1); } return ret; } }; bit st[200001]; int id = 0; pll sol() { ll c, ret = 0; cin >> c; if (c == 0) { auto [sl, a] = sol(); auto [sr, b] = sol(); ret += sl + sr; if(st[a].v.size() < st[b].v.size()) swap(a, b); ll acnt = 0, bcnt = 0; int siz = st[a].v.size(); for(auto x : st[b].v){ int cnt = st[a].sum(x-1); acnt += cnt; bcnt += siz - cnt; } ret += min(acnt, bcnt); for(auto x : st[b].v){ st[a].add(x, 1); } return {ret, a}; } else { int idx = id++; st[idx].init(200000); st[idx].add(c, 1); return {0, idx}; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int N; cin >> N; auto [ans, idx] = sol(); cout<<ans; }
#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...