Submission #1332283

#TimeUsernameProblemLanguageResultExecution timeMemory
1332283riafhasan2010Arranging Shoes (IOI19_shoes)C++17
100 / 100
845 ms273188 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll count_swaps(vector<int> s) {
  int n = s.size(); 
  vector<queue<int>> l(n + 1), r(n + 1);
  for (int i = 0; i < n; i++) {
    (s[i] < 0 ? l : r)[abs(s[i])].push(i);
    s[i] = abs(s[i]);
  }
  vector<bool> vis(n + 1, 0);
  vector<int> v;
  ll ans = 0;
  for (int i = 0, cur = 0; i < n; i++) {
    if (vis[i]) continue;
    int left = l[s[i]].front(); l[s[i]].pop();
    int right = r[s[i]].front(); r[s[i]].pop();
    vis[left] = vis[right] = true;
    int leftind = upper_bound(v.begin(), v.end(), left) - v.begin();
    leftind = left + v.size() - leftind;
    ans += abs(leftind - cur * 2);
    v.insert(upper_bound(v.begin(), v.end(), left), left);
    int rightind = upper_bound(v.begin(), v.end(), right) - v.begin();
    rightind = right + v.size() - rightind;
    ans += abs(rightind - (cur * 2 + 1));
    v.insert(upper_bound(v.begin(), v.end(), right), right);
    cur++;
  }
  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...