Submission #422941

#TimeUsernameProblemLanguageResultExecution timeMemory
422941donentsetoArranging Shoes (IOI19_shoes)C++14
10 / 100
96 ms134928 KiB
#include <bits/stdc++.h>
using namespace std;

const int maxn = 200005;
int n;
int paired [maxn];
stack <int> st [maxn];

int fenwick [maxn];
void upd (int x){
	while (x <= n){
		fenwick [x] ++;
		x += x & -x;
	}
}
int query (int x){
	int ans = 0;
	while (x > 0){
		ans += fenwick [x];
		x -= x & -x;
	}
	return ans;
}

long long count_swaps (vector <int> a){

	n = a.size ();
	long long ans = 0;
	for (int i = 0; i < n; i ++){
		int size = abs (a [i]);
		if (st [size].empty () || a [st [size].top ()] == a [i]) st [size].push (i);
		else{
			paired [st [size].top ()] = i;
			paired [i] = -1;
			if (a [i] < 0) ans ++;
			st [size].pop ();
		}
	}
	int cnt = 0;
	for (int i = 0; i < n; i ++){
		if (paired [i] == -1) continue;
		ans += cnt * 2;
		ans -= query (paired [i]);
		ans -= query (i);
		upd (paired [i]);
		cnt ++;
	}
	return ans;

}

//int main (){

	//cout << count_swaps ({2, 1, -1, -2}) << '\n';

//}
#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...