제출 #170683

#제출 시각아이디문제언어결과실행 시간메모리
170683youngyojunArranging Shoes (IOI19_shoes)C++17
50 / 100
1082 ms7420 KiB
#include "shoes.h" #include <bits/stdc++.h> #define eb emplace_back #define sz(V) ((int)(V).size()) #define allv(V) ((V).begin()),((V).end()) #define rb(x) ((x)&(-(x))) #define fi first #define se second using namespace std; typedef long long ll; typedef pair<int, int> pii; const int MAXN = 200055; struct BIT { int d[MAXN]; void upd(int x, int r) { for(x += 5; x < MAXN; x += rb(x)) d[x] += r; } int get(int x) { int r = 0; for(x += 5; x; x -= rb(x)) r += d[x]; return r; } } bit; vector<int> BV[MAXN]; vector<pii> AV; int A[MAXN]; ll Ans; int N; ll solve() { for(int i = 0; i < N*2; i++) { if(A[i] > 0) BV[A[i]].eb(i); else AV.eb(-A[i], i); } for(int i = 1; i <= N; i++) reverse(allv(BV[i])); for(int i = 0, x = 0, y; i < N; i++, x += 2) { y = AV[i].fi; Ans += x - AV[i].se + i*2 - bit.get(AV[i].se); bit.upd(AV[i].se, 1); Ans += x+1 - BV[y].back() + i*2+1 - bit.get(BV[y].back()); bit.upd(BV[y].back(), 1); BV[y].pop_back(); } return Ans; } long long count_swaps(std::vector<int> s) { N = sz(s)/2; for(int i = 0; i < N*2; i++) A[i] = s[i]; for(; !s.empty();) { if(s[0] < 0) { int x = -s[0]; s.erase(s.begin()); int i = 0; for(; s[i] != x; i++); Ans += i; s.erase(s.begin() + i); } else { int x = s[0]; int i = 0; for(; s[i] != -x; i++); Ans += i; s.erase(s.begin() + i); for(i = 0; s[i] != x; i++); Ans += i; s.erase(s.begin() + i); } } return Ans; return solve(); }
#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...