Submission #200921

#TimeUsernameProblemLanguageResultExecution timeMemory
200921LawlietArranging Shoes (IOI19_shoes)C++17
45 / 100
48 ms5236 KiB
#include <bits/stdc++.h>
#include "shoes.h"

using namespace std;
typedef long long int lli;

const int MAXN = 200010;

class FenwickTree
{
	public:

		void update(int i, int v)
		{
			for( ; i < MAXN ; i += i & -i )
				BIT[i] += v;
		}

		int query(int i)
		{
			int ans = 0;

			for( ; i > 0 ; i -= i & -i )
				ans += BIT[i];

			return ans;
		}

		int sum(int L, int R) { return query( R ) - query( L - 1 ); }

		FenwickTree() { memset( BIT , 0 , sizeof(BIT) ); }

	private:

		int BIT[MAXN];
};

vector< int > L;
vector< int > R;

bool marc[MAXN];

FenwickTree BIT;

long long count_swaps(vector<int> s) 
{
	int n = s.size();

	for(int i = 1 ; i <= n ; i++)
	{
		if( s[i - 1] < 0 ) L.push_back( i );
		else R.push_back( i );
	}

	for(int i = 1 ; i <= n ; i++)
		BIT.update( i , 1 );

	lli ans = 0;
	int last = 0;

	for(int i = 1 ; i <= n ; i++)
	{
		if( marc[i] ) continue;

		if( s[i - 1] > 0 )
		{
			ans++;
			swap( L[last] , R[last] );
		}

		marc[ R[last] ] = true;

		ans += BIT.sum( L[last] + 1 , R[last] ) - 1;
		BIT.update( R[last] , -1 ); 
		
		last++;
	}

	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...