Submission #1364832

#TimeUsernameProblemLanguageResultExecution timeMemory
1364832semiautoArranging Shoes (IOI19_shoes)C++20
10 / 100
0 ms344 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;

int bit[200067];

int f_sum(int r) {
        int ret = 0;
        for (; r >= 0; r = (r & (r + 1)) - 1)
            ret += bit[r];
        return ret;
}

void f_upd(int idx, int delta) {
        for (; idx < 200067; idx = idx | (idx + 1))
            bit[idx] += delta;
    }

long long count_swaps(std::vector<int> s) {
	int n = (int)(s.size()) / 2;
	queue <int> q[2 * n + 1];
	for (int i = 0; i < 2 * n; i++) {
		q[s[i] + n].push(i);
	}
	vector <bool> fixed(2 * n);
	long long answer = 0;
	for (int i = 0; i < 2 * n; i++) {
		if (fixed[i]) {
			continue;
		}
		int p = q[-s[i] + n].front();
		q[-s[i] + n].pop();
		q[s[i] + n].pop();
		fixed[p] = 1;
		answer += p - i - 1;
		if (s[i] > 0) {
			answer++;
		}
		answer += f_sum(p);
		f_upd(0, 1);
		f_upd(p + 1, -1);
	}
	return answer;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...