제출 #1368873

#제출 시각아이디문제언어결과실행 시간메모리
1368873viduxArranging Shoes (IOI19_shoes)C++17
100 / 100
323 ms27028 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> t;
int n;
void update(int p, int v) {
	for (t[p += n] = v; p > 1; p /= 2) t[p/2] = t[p]+t[p^1];
}
ll query(int l, int r) {
	ll ret = 0;
	for (l += n, r += n; l < r; l /= 2, r /= 2) {
		if (l&1) ret += t[l++];
		if (r&1) ret += t[--r];
	}
	return ret;
}
long long count_swaps(std::vector<int> s) {
	n = (int)s.size();
	t.resize(2*n);
	map<int, vector<int>> mp;
	for (int i = 0; i < n; i++) mp[s[i]].push_back(i), update(i, 1);
	for (auto &[k, v] : mp) reverse(v.begin(), v.end());
	ll ans = 0;
	for (int i = 0; i < n; i++) if (mp[s[i]].size() && i == mp[s[i]].back()) {
		if (s[i] > 0) ans++;
		mp[s[i]].pop_back();
		int j = mp[-s[i]].back();
		mp[-s[i]].pop_back();
		update(i, 0), update(j, 0);
		ans += query(i, j);
	}
	return ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…