제출 #249369

#제출 시각아이디문제언어결과실행 시간메모리
249369I_am_muslimArranging Shoes (IOI19_shoes)C++14
10 / 100
76 ms135036 KiB
# include <bits/stdc++.h>
# define ll long long
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required

# define speed ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
using namespace __gnu_pbds; //required

template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;


const int MAX_N = 100007;

ll count_swaps( vector < int > s ) {
	speed;
	ll n = s.size(), sz = 0;

	ll ans = 0;
	vector < int > used(n);
	ordered_set<int> ids;

	vector < queue < int > > vc(2 * MAX_N);
	for ( int i = 0; i < n; i++ ) {
		s[i] += MAX_N;
		vc[s[i]].push( i );
	}
	// cout << "Done 1" << endl;
	for ( int i = 0; i < n; i++ ) {
		if ( used[i] ) {
			continue;
		}

		s[i] -= MAX_N;
		int l = i, r = vc[-s[i] + MAX_N].front();
		// cout << "Done 2 " << l << ' ' << r << endl;
		vc[ s[i] + MAX_N ].pop();
		int rr = r;
		used[r] = 1;
		vc[-s[i] + MAX_N].pop();

		ll x = ids.order_of_key(l+1);
		l += x;
		x = ids.order_of_key(r + 1);
		r += x;
		//auto it = upper_bound( ids.begin(), ids.end(), i );
		//it--;
		//int x = it - ids.begin();
		//x = sz - x;
		//l += x;
		//it = upper_bound( ids.begin(), ids.end(), r );
		//it--;
		//x = it - ids.begin();
		//x = sz - x;
		//r += x;
		ans += r - l - 1;
		if ( s[i] > 0 ) {
			ans++;
		}
		sz++;
		ids.insert( rr );
		//sort (ids.begin(), ids.end());
	}
	return ans;
}

//int main() {
//	ll n;
//	cin >> n;
//	vector < int > S(2 * n);
//	for ( ll  i = 0; i < 2 * n; i++ ) {
//		cin >> S[i];
//	}
//	cout << count_swaps( S );
//}

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