Submission #154592

#TimeUsernameProblemLanguageResultExecution timeMemory
154592juckterArranging Shoes (IOI19_shoes)C++14
100 / 100
109 ms15736 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; typedef pair<int, int> ii; const int MAXN = 2e5 + 5; int BIT[MAXN]; void upd(int p, int v) { for(; p < MAXN; p += (p & -p)) BIT[p] += v; } int sum(int p) { int tot = 0; for(; p; p -= (p & -p)) tot += BIT[p]; return tot; } long long count_swaps(vector<int> s) { int n = s.size() / 2; vector<vector<int>> positions(2*n + 2); vector<int> taken(2*n); fill(taken.begin(), taken.end(), 0); fill(BIT, BIT + MAXN, 0); for(int i = 1; i <= 2*n; i++) upd(i, 1); for(int i = 2*n - 1; i >= 0; i--) positions[s[i] + n].push_back(i); long long ans = 0; for(int i = 0; i < 2*n; i++) { if(taken[i]) continue; int p = positions[n - s[i]].back(); positions[n - s[i]].pop_back(); positions[s[i] + n].pop_back(); if(s[i] > 0) { ans += sum(p); upd(i + 1, -1); } else { upd(i + 1, -1); ans += sum(p); } upd(p + 1, -1); taken[i] = taken[p] = 1; } 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...