제출 #1335149

#제출 시각아이디문제언어결과실행 시간메모리
1335149zhehanArranging Shoes (IOI19_shoes)C++20
10 / 100
1 ms344 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long

vector<int> ft;

void upd(int p, int v) {
  while (p < ft.size()) {
    ft[p] += v;
    p += p & (-p);
  }
}

int query(int p) {
  int sum = 0;
  while (p > 0) {
    sum += ft[p];
    p -= p & (-p);
  }
  return sum;
}

int invquery(int p) { return query(ft.size() - 1) - query(p); }

long long count_swaps(std::vector<signed> s) {
  int n = s.size() / 2;
  map<int, int> ind;
  vector<int> inv(2 * n, 0);
  int c = 1;
  for (int i = 0; i < 2 * n; ++i) {
    if (ind[abs(s[i])] == 0) {
      ind[abs(s[i])] = c++;
      if (s[i] < 0) {
        inv[i] = 2 * ind[-s[i]] - 1;
      } else {
        inv[i] = 2 * ind[s[i]];
      }
    } else {
      if (s[i] < 0) {
        inv[i] = 2 * ind[-s[i]] - 1;
      } else {
        inv[i] = 2 * ind[s[i]];
      }
      ind[abs(s[i])] = 0;
    }
  }
  int tinv = 0;
  ft = vector<int>(2 * n + 10, 0);
  for (auto e : inv) {
    tinv += invquery(e);
    upd(e, 1);
  }
  return tinv;
}
#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...