제출 #1141156

#제출 시각아이디문제언어결과실행 시간메모리
1141156altern23Arranging Shoes (IOI19_shoes)C++20
30 / 100
68 ms12200 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; #define ll long long struct fenwick{ ll n; vector<ll>bit; fenwick(ll _n = 0) : n(_n), bit(n + 5) {} void upd(ll idx, ll val){ idx++; for(int i = idx; i <= n; i += i & -i) bit[i] += val; } ll get(ll idx){ idx++; ll ans = 0; for(int i = idx; i >= 1; i -= i & -i) ans += bit[i]; return ans; } ll query(ll l, ll r){ if(l > r) return 0; return get(r) - get(l - 1); } }; long long count_swaps(vector<int> s) { ll n = s.size(); vector<pair<ll, ll>> isi[n + 5]; for(int i = 0; i < n; i++){ isi[abs(s[i])].push_back({i, s[i]}); } fenwick bit(n); ll ans = 0; vector<pair<ll, ll>> segs; for(ll i = 1; i <= n; i++){ deque<ll> pos, neg; for(auto [idx, val] : isi[i]){ // kalau - ketemu + if(val < 0){ if(!pos.empty()){ ans += (idx + bit.query(0, idx)) - (pos.front() + bit.query(0, pos.front())); bit.upd(pos.front(), 1); bit.upd(idx, -1); pos.pop_front(); } else{ neg.push_back(idx); } } else{ if(!neg.empty()){ ans += (idx + bit.query(0, idx)) - (neg.front() + bit.query(0, neg.front())) - 1; bit.upd(neg.front(), 1); bit.upd(idx, -1); neg.pop_front(); } else{ pos.push_back(idx); } } } } 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...