Submission #810724

#TimeUsernameProblemLanguageResultExecution timeMemory
810724OAleksaArranging Shoes (IOI19_shoes)C++14
0 / 100
19 ms12316 KiB
#include <bits/stdc++.h>
#include "shoes.h"
 
#define f first
#define s second
using namespace std; 
 
const int maxn = 1e5 + 69;
set<int> l[maxn], r[maxn];
long long count_swaps(vector<int> s) {
	int n = s.size();
	vector<int> a = s;
	int ok = 1;
	for(int i = 0;i < n;i++) {
		if(a[i] < 0 && a[i + n] > 0 && abs(a[i]) == a[i + n])	
			ok &= 1;
	}
	if(ok) {
		n /= 2;
		return (n - 1) * n / 2;
	}
	for(int i = 0;i < n;i++) {
		if(a[i] < 0)
			l[abs(a[i])].insert(i);
		else
			r[a[i]].insert(i);
	}
	long long ans = 0;
	for(int i = 0;i < n;i += 2) {
		if(a[i] < 0) {
			auto u = *r[abs(a[i])].begin();
			r[abs(a[i])].erase(u);
			for(int j = u - 1;j > i;j--) {
				++ans;
				if(a[j] < 0) {
					l[abs(a[j])].erase(j);
					l[abs(a[j])].insert(j + 1);
				}
				else {
					r[a[j]].erase(j);
					r[a[j]].insert(j + 1);
				}
				swap(a[j], a[j + 1]);
			}
			l[abs(a[i])].erase(i);
		}
		else {
			auto u = *l[a[i]].begin();
			l[abs(a[i])].erase(u);
			for(int j = u - 1;j >= i;j--) {
				++ans;
				if(a[j] < 0) {
					l[abs(a[j])].erase(j);
					l[abs(a[j])].insert(j + 1);
				}
				else {
					r[a[j]].erase(j);
					r[a[j]].insert(j + 1);
				}
				swap(a[j], a[j + 1]);
			}
		}
	}
	return ans;
}
 
 
//  
// int main()
// {
	  // ios_base::sync_with_stdio(false);
	  // cin.tie(0);
	  // cout.tie(0);
	  // int tt = 1;
		// //cin >> tt;
	  // while(tt--) {
			// int n;
			// cin >> n;
			// vector<int> a(2 * n);
			// for(int i = 0;i < 2 * n;i++)
				// cin >> a[i];
			// cout << count_swaps(a) << endl;
		// }
    // return 0;
// }
#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...