Submission #159298

#TimeUsernameProblemLanguageResultExecution timeMemory
159298maximath_1Arranging Shoes (IOI19_shoes)C++14
100 / 100
99 ms15516 KiB
#include "shoes.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mxn=200069;
ll fw[mxn];
void add(ll x, ll val){
	for(ll i=x; i<mxn; i+=i&-i) fw[i]+=val;
}
ll que(ll x){
	ll r=0ll;
	for(ll i=x; i>0; i-=i&-i) r+=fw[i];
	return r;
}
ll count_swaps(vector<int>S){
	ll n=S.size()/2, res=0;
	vector<pair<ll, ll> >swp, grp[mxn];
	for(ll i=0; i<2*n; i++) grp[abs(S[i])].push_back({S[i], i});
	for(int i=1; i<=n; i++){
		sort(grp[i].begin(), grp[i].end());
		int num=grp[i].size()/2;
		for(int j=0; j<num; j++){
			int l=grp[i][j].second, r=grp[i][j+num].second;
			if(l>r){swap(l, r); res++;}
			swp.push_back({l+1, r+1});
		}
	}
	sort(swp.begin(), swp.end());
	for(int i=1; i<=2*n; i++) add(i, 1);
	for(int i=0; i<swp.size(); i++){
		res+=que(swp[i].second-1)-que(swp[i].first);
		add(swp[i].first, -1); add(swp[i].second, -1);
	}
	return res;
}

Compilation message (stderr)

shoes.cpp: In function 'll count_swaps(std::vector<int>)':
shoes.cpp:30:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<swp.size(); i++){
               ~^~~~~~~~~~~
#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...