제출 #1356145

#제출 시각아이디문제언어결과실행 시간메모리
1356145tullArranging Shoes (IOI19_shoes)C++20
10 / 100
14 ms5032 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
struct Fenwick{
	int n;
	vector<int>a;
	Fenwick(int n):n(n),a(n+10){}
	void update(int i,int x){
		for(;i<=n;i+=i&-i){
			a[i]+=x;
		}
	}
	int query(int i){
		int res=0;
		for(;i>0;i-=i&-i){
			res+=a[i];
		}
		return res;
	}
	int range(int l,int r){
		return query(r)-query(l-1);
	}
};
long long count_swaps(vector<int> s) {
	int n=s.size(),x;
	Fenwick a(n);
	ll sum=0LL;
	vector<int>left(n+10),right(n+10),fnd(n+10);
	for(int i=1;i<=n;++i){
		if(s[i-1]<0){
			left[abs(s[i-1])]=i;
		}else{
			right[s[i-1]]=i;
		}
	}
	for(int i=1;i<=n;++i){
		x=s[i-1];
		int now=sum;
		if(fnd[abs(x)])continue;
		if(x<0){
			x=abs(x);
			sum+=right[x]-left[x]-1-a.range(left[x],right[x]);
			a.update(right[x],1);
		}else{
			sum+=left[x]-right[x]-a.range(right[x],left[x]);
			a.update(left[x],1);
		}
		fnd[abs(x)]=1;
		//cout<<"--> "<<sum-now<<'\n';
	}
	return sum;
}
/*
3
-3 -2 -1 3 1 2

*/
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…