제출 #1266625

#제출 시각아이디문제언어결과실행 시간메모리
1266625thewizardmanArranging Shoes (IOI19_shoes)C++20
50 / 100
40 ms20808 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; using ll = long long; ll n, ans, fw[100000]; bool flag[100000]; set<int> s[100001], ns[100001]; void update(int i) { for (; i < n; i = i | (i+1)) fw[i]++; } ll query(int i) { ll ret = 0; for (; i >= 0; i = (i & (i+1)) - 1) ret += fw[i]; return ret; } long long count_swaps(std::vector<int> v) { n = v.size(); for (int i = 0; i < n; i++) if (v[i] > 0) s[v[i]].insert(i); else ns[-v[i]].insert(i); for (int i = 0; i < n; i++) if (!flag[i]) { if (v[i] > 0) { ans += *ns[v[i]].begin()-i-(query(*ns[v[i]].begin())-query(i)); update(*ns[v[i]].begin()); flag[*ns[v[i]].begin()] = 1; s[v[i]].erase(i); ns[v[i]].erase(ns[v[i]].begin()); } else { ans += *s[-v[i]].begin()-i-1-(query(*s[-v[i]].begin())-query(i)); update(*s[-v[i]].begin()); flag[*s[-v[i]].begin()] = 1; ns[-v[i]].erase(i); s[-v[i]].erase(s[-v[i]].begin()); } } return 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...