Submission #1160685

#TimeUsernameProblemLanguageResultExecution timeMemory
1160685hyakupArranging Shoes (IOI19_shoes)C++20
100 / 100
196 ms274024 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long

ll count_swaps( vector<int> v ) {
	int n = v.size();

	queue<int> fila[2*(n + 1)];

	int cont = 1;
	ll resp = 0;

	vector<int> pos(n);

	for( int i = 0; i < n; i++ ){
		int t = (( v[i] > 0 ) ? 1 : 0 );
		if( fila[2*abs(v[i]) + 1 - t ].empty() ){
			pos[i] = cont;
			cont += 2;
			fila[2*abs(v[i]) + t].push(i);
			if( t == 1 ) resp++;
		}
		else{
			int outro = fila[2*abs(v[i]) + 1 - t].front();
			fila[2*abs(v[i]) + 1 - t].pop();

			pos[i] = pos[outro] + 1;
		}
	}

	vector<ll> bit(n + 1);

	auto update = [&]( int id, int val ){
		for( int i = id; i < bit.size(); i += i&-i ) bit[i] += val;
	};

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

	for( int i = 0; i < n; i++ ){
		resp += i - query(pos[i]);
		update(pos[i], 1);
	}

	return resp;
}
#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...