제출 #730631

#제출 시각아이디문제언어결과실행 시간메모리
730631lucriArranging Shoes (IOI19_shoes)C++17
50 / 100
135 ms137632 KiB
#include "shoes.h"
#include <cstdio>
#include <cassert>
#include <queue>
std::queue<int>a[200010];
int aib[200010],n;
void adauga(int poz,int val)
{
    for(;poz<=n;poz+=(poz&(-poz)))
        aib[poz]+=val;
}
int suma(int poz)
{
    int ans=0;
    for(;poz>0;poz-=(poz&(-poz)))
        ans+=aib[poz];
    return ans;
}
int rezolva(int ps,int pd)
{
    ps=suma(ps);
    pd=suma(pd);
    if(ps<pd)
        return ps+pd-1;
    return ps+pd;
}
long long count_swaps(std::vector<int> s)
{
	int ans=0;
	n=s.size();
	for(int i=1;i<n;++i)
        adauga(i,1);
    for(int i=0;i<n;++i)
    {
        if(a[n/2-s[i]].empty())
            a[n/2+s[i]].push(i);
        else
        {
            if(s[i]<0)
                ans+=rezolva(i,a[n/2-s[i]].front());
            else
                ans+=rezolva(a[n/2-s[i]].front(),i);
            adauga(i+1,-1);
            adauga(a[n/2-s[i]].front()+1,-1);
            a[n/2-s[i]].pop();
        }
    }
    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...