Submission #312157

#TimeUsernameProblemLanguageResultExecution timeMemory
312157zakaFArranging Shoes (IOI19_shoes)C++14
50 / 100
1096 ms70468 KiB
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <cstring>
 
using namespace std;
using ll = long long;
using ld = long double;
using uint = unsigned int;
using ull = unsigned long long;
 
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define fi first
#define se second
#ifdef LOCAL
	#include </home/linux/debug.h>
	#define dbg(...) cout << "LINE(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [", _print(__VA_ARGS__)
#else
	#define dbg(...)
#endif
#include <queue>
#define sz(x) (int)(x).size()
int cnt(pair<int,int> a,int i)
{
	return (a.first-i)+(a.second-i-1)+(a.first>a.second);
}
bool comp(pair<int,int> &a,pair<int,int> &b)
{
	return cnt(a,0)<cnt(b,0);
}
ll count_swaps(vector<int> x)
{
	queue<pair<int,bool>> a[sz(x)/2+1];
	vector<pair<int,int>> place;
	for(int i=0;i<sz(x);i++)
	{
		if(a[abs(x[i])].empty())
			a[abs(x[i])].push({i,x[i]>0});
		else
		{
			pair<int,bool> p = a[abs(x[i])].front();
			if(p.second!=(x[i]>0))
			{
				a[abs(x[i])].pop();
				if(x[i]>0)
					place.pb({p.first,i});
				else
					place.pb({i,p.first});
			}
			else
			{
				a[abs(x[i])].push({i,x[i]>0});
			}
		}
	}
	sort(rall(place),comp);
	ll ans = 0;
	for(int i = 0;i<sz(x);i+=2)
	{
		pair<int,int> tmp = place.back();
		place.pop_back();
		ans+=(tmp.first-i);
		if(tmp.second<tmp.first)
			tmp.second++;
		ans+=(tmp.second-(i+1));
		for(int j = 0;j<sz(place);j++)
		{
			if(place[j].first<tmp.first)
				place[j].first++;
			if(place[j].first<tmp.second)
				place[j].first++;
			if(place[j].second<tmp.first)
				place[j].second++;
			if(place[j].second<tmp.second)
				place[j].second++;
		}
	}
	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...