Submission #796625

#TimeUsernameProblemLanguageResultExecution timeMemory
796625vjudge1Arranging Shoes (IOI19_shoes)C++17
15 / 100
225 ms26800 KiB
#include "shoes.h"
#include "bits/stdc++.h"
using namespace std;

#define ll long long
#define vi vector<int>

vector<ll> tr;
void init(int n){
  tr.assign(n,1);
  for(int i=0;i<n;i++){
    int j=i|(i+1);
    if(j<n) tr[j]+=tr[i];
  }
}
void upd(int i){
  for(;i<(int)tr.size();i|=i+1) tr[i]--;
}
ll get(int i){
  ll res=0;
  for(;i>=0;i=(i&(i+1))-1) res+=tr[i];
  return res;
}
ll get(int i, int j){
  return get(j-1)-get(i);
}

long long count_swaps(vi s) {
	int n=s.size();

	map<int,priority_queue<int,vi,greater<int>>> ma;
	for(int i=0;i<n;i++) ma[s[i]].push(i);

	init(n);
	
	ll res=0;
	bool taken[n]={};
	for(int i=0;i<n;i++){
	  if(taken[i]) continue;

	  int j=ma[-s[i]].top();
	  ma[-s[i]].pop();
	  ma[s[i]].pop();
	  
	  res+=get(i,j);
	  upd(j);

	  taken[i]=taken[j]=true;
	}
	
	return res;
}
#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...