Submission #842578

#TimeUsernameProblemLanguageResultExecution timeMemory
842578beepbeepsheepArranging Shoes (IOI19_shoes)C++17
100 / 100
114 ms141312 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long
const ll maxn=2e5+5;
ll fen[maxn];
bool vis[maxn];
void upd(ll x){
    if (x==0) return;
    while (x<maxn){
        fen[x]++;
        x+=(x&-x);
    }
}
ll query(ll x){
    ll ans=0;
    while (x){
        ans+=fen[x];
        x-=(x&-x);
    }
    return ans;
}
ll query(ll x, ll y){
    return query(y)-query(x-1);
}
queue<ll> adj[maxn];
ll n;
long long count_swaps(std::vector<int> v){
    n=v.size();
    for (int i=0;i<n;i++){
        adj[v[i]+100000].emplace(i);
    }
    ll ans=0;
    for (int i=0;i<n;i++){
        if (vis[i]) continue;
        ll ele=v[i];
        ll inv=-v[i];
        ll pos=adj[inv+100000].front();
        adj[inv+100000].pop();
        adj[ele+100000].pop();
        ans+=(pos-i-1)-query(i+1,pos);
        ans+=(ele>inv);
        upd(i),upd(pos);
        vis[i]=vis[pos]=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...