Submission #605773

#TimeUsernameProblemLanguageResultExecution timeMemory
605773rrrr10000Arranging Shoes (IOI19_shoes)C++14
100 / 100
147 ms22708 KiB
#include "shoes.h"

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vi;
typedef vector<vi> vvi;
typedef vector<vvi> vvvi;
typedef pair<ll,ll> P;
typedef vector<P> vp;
typedef vector<vp> vvp;
typedef vector<vvp> vvvp;
typedef vector<bool> vb;
#define rep(i,n) for(ll i=0;i<(ll)(n);i++)
#define REP(i,k,n) for(ll i=(ll)(k);i<(ll)(n);i++)
#define all(a) a.begin(),a.end()
#define rsort(a) {sort(all(a));reverse(all(a));}
#define fi first
#define se second
#define pb emplace_back
template<class T> void out(T a){cout<<a<<endl;}
template<class T> void outv(T v){rep(i,v.size()){if(i)cout<<' ';cout<<v[i];}cout<<endl;}
template<class T> bool chmin(T&a,T b){if(a>b){a=b;return true;}return false;}
const ll inf=1001001001;

struct BIT{
	vi bit;
	ll n;
	BIT(ll n_):n(n_),bit(n_+1){}
	void add(ll i,ll x){
		for(i++;i<=n;i+=i&-i)bit[i]+=x;
	}
	ll sum(ll i){
		ll res=0;
		for(;i>0;i-=i&-i)res+=bit[i];
		return res;
	}
	ll get(ll l,ll r){
		return sum(r)-sum(l);
	}
};
long long count_swaps(std::vector<int> s) {
	ll n=s.size(),ans=0;
	vvvi al(n/2,vvi(2));
	vp v(n);
	rep(i,n)v[i]=P(abs(s[i])-1,(int)(s[i]<0));
	for(int i=n-1;i>=0;i--)al[v[i].fi][v[i].se].pb(i);
	vb done(n,false);
	BIT bit(n);
	rep(i,n)bit.add(i,1);
	rep(i,n)if(!done[i]){
		ans+=bit.get(i,al[v[i].fi][v[i].se^1].back())-v[i].se;
		rep(j,2){
			done[al[v[i].fi][j].back()]=true;
			bit.add(al[v[i].fi][j].back(),-1);
			al[v[i].fi][j].pop_back();
		}
	}
	return ans;
}

Compilation message (stderr)

shoes.cpp: In constructor 'BIT::BIT(ll)':
shoes.cpp:28:5: warning: 'BIT::n' will be initialized after [-Wreorder]
   28 |  ll n;
      |     ^
shoes.cpp:27:5: warning:   'vi BIT::bit' [-Wreorder]
   27 |  vi bit;
      |     ^~~
shoes.cpp:29:2: warning:   when initialized here [-Wreorder]
   29 |  BIT(ll n_):n(n_),bit(n_+1){}
      |  ^~~
#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...