제출 #1316881

#제출 시각아이디문제언어결과실행 시간메모리
1316881exoworldgdArranging Shoes (IOI19_shoes)C++20
10 / 100
0 ms332 KiB
#include<bits/stdc++.h>
#define ll long long
#define exoworldgd cin.tie(0)->sync_with_stdio(0),cout.tie(0)
using namespace std;
struct BIT{
	int n;vector<int>t;
	BIT(int n):n(n),t(n+1){}
	void upd(int i,int v){for(i++;i<=n;i+=i&-i)t[i]+=v;}
	int qry(int i){int r=0;for(i++;i;i-=i&-i)r+=t[i];return r;}
	int qry(int l,int r){return qry(r)-(l?qry(l-1):0);}
};
ll count_swaps(vector<int>s) {
	int n=s.size(),ans=0;
	map<int,queue<int>>mp;
	for(int i=0;i<n;i++)mp[s[i]].push(i);
	BIT bit(n);
	for(int i=0,cur,pos,a,b;i<n;i+=2){
		cur=mp[s[i]].front(),mp[s[i]].pop(),pos=mp[-s[i]].front(),mp[-s[i]].pop(),a=cur+bit.qry(cur),b=pos+bit.qry(pos);
		if(a>b)swap(a,b);
		ans+=b-a-1,ans+=s[cur]>0,bit.upd(cur,-1),bit.upd(pos,-1),bit.upd(i,1),bit.upd(i+1,1);
	}
	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...