Submission #1047284

#TimeUsernameProblemLanguageResultExecution timeMemory
1047284vjudge1Arranging Shoes (IOI19_shoes)C++17
10 / 100
1 ms348 KiB
#include "shoes.h"

#include <bits/stdc++.h>
using namespace std;

const int lim=1e5+100;

struct{
	int tree[lim];
	void update(int p,int val){
		p++;
		while(p<lim){
			tree[p]+=val;
			p+=p&-p;
		}
	}
	int query(int p){
		p++;
		int ans=0;
		while(p){
			ans+=tree[p];
			p-=p&-p;
		}
		return ans;
	}
	int query(int l,int r){
		if(r<l)return 0;
		return query(r)-query(l-1);
	}
}fw;

long long count_swaps(std::vector<int> s) {
	int ans=0;
	int n=s.size();
	unordered_map<int,int>mp;
	for(int i=0;i<n;i++){
		if(mp.count(-s[i])){
			int ind=mp[-s[i]];
			mp.erase(-s[i]);
			int k=fw.query(ind+1,i);
			ans+=k;
			fw.update(i+1,-1);
			if(s[i]<0){
				ans+=i-ind;
				fw.update(ind,1);
			}else{
				ans+=i-ind-1;
				fw.update(ind+1,1);
			}
		}else{
			mp[s[i]]=i;
		}
		//cerr<<ans<<"\n";
	}
	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...