This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "shoes.h"
#include <bits/stdc++.h>
#define MAXN 200005
using namespace std;
int x, a[MAXN], n;
inline int lowbit(int x)
{
  return x & (-x);
}
void add(int x)
{
  while (x <= n)
  {
    a[x]++;
    x += lowbit(x);
  }
  return;
}
int pre(int x)
{
  int ans = 0;
  while (x > 0)
  {
    ans += a[x];
    x -= lowbit(x);
  }
  return ans;
}
int query(int x, int y)
{
  return pre(y) - pre(x - 1);
}
vector<vector<int> > rpos(MAXN), lpos(MAXN);
bool vis[MAXN];
long long count_swaps(std::vector<int> s)
{
  n = s.size();
  s.push_back(0);
  for (int i = n; i >= 1; i--)
    s[i] = s[i - 1];
  for (int i = 1; i <= n; i++)
    if (s[i] > 0)
      rpos[s[i]].push_back(i);
    else
      lpos[-s[i]].push_back(i);
  long long sum = 0;
  int cnt = 0;
  for (int i = 1; i <= n; i++)
  {
    if (vis[i])
      continue;
    if (s[i] < 0)
    {
      int ss = -s[i];
      sum += i + query(i + 1, n) - 1 - cnt;
      vis[i] = 1;
      //cout<<sum<<" ";
      add(i);
      for (int j = 0; j < (int)rpos[ss].size(); j++)
      {
        int pos = rpos[ss][j];
        if (vis[pos])
          continue;
        vis[pos] = 1;
        //cout<<i<<" "<<pos<<endl;
        sum += pos - (cnt + 2) + query(pos + 1, n);
        add(pos);
        //cout<<sum<<endl;
        break;
      }
      cnt += 2;
    }
    else if (s[i] > 0)
    {
      int ss = s[i];
      sum += (i - cnt - 1) + query(i + 1, n);
      add(i);
      vis[i] = 1;
      for (int j = 0; j < (int)lpos[ss].size(); j++)
      {
        int pos = lpos[ss][j];
        if (vis[pos])
          continue;
        vis[pos] = 1;
        sum += pos - (cnt + 2) + query(pos + 1, n) + 1;
        add(pos);
        break;
      }
      cnt += 2;
    }
  }
  return sum;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |