제출 #1174042

#제출 시각아이디문제언어결과실행 시간메모리
1174042somefolkArranging Shoes (IOI19_shoes)C++20
100 / 100
232 ms27976 KiB
#include <iostream> #include <cmath> #include <algorithm> #include <string> #include <vector> #include <map> #include <unordered_map> #include <queue> #include <set> #include <unordered_set> #include <complex> #include <list> #include <cassert> #include <chrono> #include <random> #include <stack> #include <iomanip> #include <fstream> using namespace std; #define endl "\n" #define int long long const int INF = 1e5+7; const int MOD = 1e9+7; struct SGT{ int size = 1; vector<int> st; void build(vector<int32_t> &a, int x, int lx, int rx){ if(rx - lx == 1){ if(lx < (int)a.size()){ st[x] = 1; } return; } int m = (lx + rx) / 2; build(a, 2*x+1, lx, m); build(a, 2*x+2, m, rx); st[x] = st[2*x+1] + st[2*x+2]; } void build(int n, vector<int32_t> &a){ while(size < n) size *= 2; st.resize(2*size); build(a, 0, 0, size); } void set(int i, int v, int x, int lx, int rx){ if(rx - lx == 1){ st[x] = v; return; } int m = (lx + rx) / 2; if(i < m){ set(i, v, 2*x+1, lx, m); } else { set(i, v, 2*x+2, m, rx); } st[x] = st[2*x+1] + st[2*x+2]; } void set(int i, int v){ set(i, v, 0, 0, size); } int query(int l, int r, int x, int lx, int rx){ if(rx <= l || r <= lx) return 0; if(l <= lx && rx <= r) return st[x]; int m = (lx + rx) / 2; int s1 = query(l, r, 2*x+1, lx, m); int s2 = query(l, r, 2*x+2, m, rx); return s1+s2; } int query(int l, int r){ return query(l, r, 0, 0, size); } }; int64_t count_swaps(vector<int32_t> a){ int n = a.size(); map<int, vector<int>> idx; for(int i = n-1; i >= 0; i--){ idx[a[i]].push_back(i); } SGT st; st.build(n, a); int sol = 0; vector<bool> vis(n, false); for(int i = 0; i < n; i++){ if(!vis[i]){ int next = idx[-a[i]].back(); sol += st.query(min(i, next), max(i, next)) - (a[i] < 0); st.set(i, 0); vis[i] = true; idx[a[i]].pop_back(); st.set(next, 0); vis[next] = true; idx[a[next]].pop_back(); } } return sol; }
#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...