제출 #783276

#제출 시각아이디문제언어결과실행 시간메모리
783276ivazivaArranging Shoes (IOI19_shoes)C++14
100 / 100
237 ms28348 KiB
//#include "shoes.h"
#include <bits/stdc++.h>

using namespace std;

#define MAXN 200010

long long nn;
long long niz[MAXN];
long long fenvik[MAXN];
map<long long,vector<long long>> mapa;

void update(long long pos,long long val)
{
    while (pos<=nn)
    {
        fenvik[pos]+=val;
        pos+=pos&(-pos);
    }
}

long long query(long long x)
{
    long long ans=0;
    while (x>0)
    {
        ans+=fenvik[x];
        x-=x&(-x);
    }
    return ans;
}

long long count_swaps(std::vector<int> s)
{
    nn=s.size();
    long long sol=0;
    for (long long i=1;i<=nn;i++) update(i,1);
    for (long long i=1;i<=nn;i++) niz[i]=s[i-1];
    for (long long i=nn;i>=1;i--) mapa[niz[i]].push_back(i);
    for (long long i=1;i<=nn;i++)
    {
        if (query(i)-query(i-1)!=1) continue;
        long long poz=mapa[-niz[i]].back();
        mapa[niz[i]].pop_back();
        mapa[-niz[i]].pop_back();
        update(i,-1);
        update(poz,-1);
        sol+=query(poz)-query(i)+(niz[i]>0);
    }
    return sol;
}
#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...