제출 #1332455

#제출 시각아이디문제언어결과실행 시간메모리
1332455salmonArranging Shoes (IOI19_shoes)C++20
0 / 100
1 ms344 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;

long long count_swaps(std::vector<int> s) {
	struct node{
		int s,e,m;
		int v;
		node *l, *r;
		
		node(int S, int E){
			s = S;
			e = E;
			m = (s + e)/2;
			v = 0;
			
			if(s != e){
				l = new node(s,m);
				r = new node(m + 1, e);
			}
		}
		
		int query(int S){
			if(S <= s) return v;
			
			if(S <= m) return r -> v + l -> query(S);
			else return r -> query(S);
 		}
 		
 		void update(int i){
			v++;
			
			if(s != e){
				if(i <= m) l -> update(i);
				else r -> query(i);
			}
		}
	}*root;
	
	int N = s.size();
	
	map<int,int> cont;
	map<int,int> freq;
	map<pair<int,int>,int> mep;
	int it = 0;
	
	for(int i = 0; i < N; i++){
		freq[s[i]]++;
		
		if(freq[s[i]] > cont[abs(s[i])]){
			mep[{abs(s[i]),freq[s[i]]}] = it;
			it++;
			cont[abs(s[i])]++;
		}
	}
	printf("%d\n",it);
	
	vector<int> v;
	freq.clear();
	
	root = new node(0,N-1);
	
	for(int i = 0; i < N; i++){
		freq[s[i]]++;
		
		if(s[i] > 0) v.push_back(mep[{s[i],freq[s[i]]}] * 2 + 1);
		else v.push_back(mep[{abs(s[i]), freq[s[i]] }] * 2);
	}
	
	long long int ans = 0;
	
	for(int i = 0; i < N; i++){
		ans += root -> query(v[i]);
		root -> update(v[i]);
	}
	
	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...