Submission #1190144

#TimeUsernameProblemLanguageResultExecution timeMemory
1190144alexddArranging Shoes (IOI19_shoes)C++20
100 / 100
299 ms32828 KiB
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int aib[200005],cate;
int qry(int poz)
{
    int aux=0;
    for(int i=poz;i<=cate;i+=(i&(-i)))
        aux += aib[i];
    return aux;
}
void upd(int poz, int newv)
{
    for(int i=poz;i>0;i-=(i&(-i)))
        aib[i] += newv;
}
long long nrinv(vector<int> S)
{
    long long rez=0;
    cate = S.size();
    for(int i=0;i<S.size();i++)
    {
        rez += qry(abs(S[i]) + 1);
        upd(abs(S[i]), +1);
    }
    return rez;
}
map<int,set<int>> ofval;
bool used[200005];
long long count_swaps(std::vector<int> S)
{
    int n = S.size();
    for(int i=0;i<n;i++)
        ofval[S[i]].insert(i);
    long long rez=0;
    vector<int> newv;
    for(int i=0;i<n;i++)
    {
        if(used[i])
            continue;
        auto it = ofval[-S[i]].upper_bound(i);
        newv.push_back(i);
        newv.push_back(*it);
        used[(*it)] = used[i] = 1;
        ofval[-S[i]].erase(it);
        ofval[S[i]].erase(i);
        if(S[i] > 0)
            rez++;
    }
    rez += nrinv(newv);
    return rez;
}
#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...