Submission #1291711

#TimeUsernameProblemLanguageResultExecution timeMemory
1291711goulthenArranging Shoes (IOI19_shoes)C++20
100 / 100
142 ms138244 KiB
#include <bits/stdc++.h>
#include "shoes.h"

using namespace std;

#define ll long long
#define rep(i,a,b) for(int i = a; i <= b; i++)

int bit[200010],n;

int query(int i) {
	int ans = 0;
	for(;i>0; i-=(-i&i)) ans += bit[i];
	return ans;
}

void update(int i, int x) {
	if(i==0) return;
	for (; i<=n; i+=(-i&i)) bit[i] += x;
}

ll count_swaps(vector<int> s) {
	n = s.size();
	vector<deque<int>> pos(s.size()+1);
	vector<bool> mk(s.size());
	rep(i,0,n-1) {
		update(i+1,1);
		pos[s[i]+n/2].push_back(i);
	}
	ll ans = 0;
	rep(i,0,n-1) {
		if(mk[i]) continue;
		int j = pos[-s[i]+n/2].front();
		ans += query(j+1)-1;
		if(s[i] < 0) ans--;
		mk[j] = 1;
		update(i+1,-1);
		update(j+1,-1);
		pos[-s[i]+n/2].pop_front();
		pos[s[i]+n/2].pop_front();
	}
	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...