제출 #679055

#제출 시각아이디문제언어결과실행 시간메모리
679055kussssoArranging Shoes (IOI19_shoes)C++17
100 / 100
82 ms57140 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const int N = 1e6 + 5; int n; int bit[N]; ll ans; vector<int> pos[N][2]; void Update (int p, int v) { for (int i = p; i < N; i += i & -i) bit[i] += v; } int Get (int p) { int ret = 0; for (int i = p; i >= 1; i -= i & -i) ret += bit[i]; return ret; } int Get (int l, int r) { return Get(r) - Get(l - 1); } ll count_swaps (vector<int> S) { n = S.size(); for (int i = 1; i <= n; i++) { Update(i, 1); pos[abs(S[i - 1])][S[i - 1] < 0].push_back(i); } for (int i = 1; i <= n; i++) { for (int j = 0; j < 2; j++) { reverse(pos[i][j].begin(), pos[i][j].end()); } } for (int i = 1; i <= n; i++) { if (!S[i - 1]) continue; int &x = S[i - 1]; // cerr << x << '\n'; int t = (x < 0); int j = pos[abs(x)][t ^ 1].back(); pos[abs(x)][t ^ 1].pop_back(); pos[abs(x)][t].pop_back(); x = 0; S[j - 1] = 0; Update(j, -1); ans += (t ? Get(i + 1, j) : Get(i, j)); } return ans; } // signed main() { // ios_base::sync_with_stdio(0); // cin.tie(0); // // vector<int> S = {2, 1, -1, -2}; // cout << count_swaps(S); // // return 0; // }
#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...