Submission #875080

#TimeUsernameProblemLanguageResultExecution timeMemory
875080StefanL2005Arranging Shoes (IOI19_shoes)C++14
30 / 100
1070 ms138580 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long



int nr_ofTaken(int c1, int c2, vector<int> &Taken)
{
    if (c1 == c2)
        return Taken[c1];
    return Taken[c1] + nr_ofTaken(c1 + 1, c2, Taken);
}
ll count_swaps (vector<int> S)
{
    int n = S.size() / 2;
    ll ans = 0;
    vector<int> Taken(2 * n, 0);
    vector<deque<int>> Poz(2 * n + 2);

    for (int i = 0; i < 2 * n; i++)
    {
        if (S[i] < 0)
            Poz[abs(S[i])].push_back(i);
        else
            Poz[S[i] + n].push_back(i);
    }
    
    for (int i = 0; i < 2 * n - 1; i++)
    {
        if (Taken[i] == 1)
            continue;
        if (S[i] < 0 && 0 - S[i + 1] == S[i])
        {
            Taken[i] = 1; Taken[i + 1] = 1;
            Poz[abs(S[i])].pop_front();
            Poz[abs(S[i]) + n].pop_front();

            continue;
        }

        Taken[i] = 1;
        
        // TREBUIE SA SCADEM SI NR DE TAKEN[J] = 1 UNDE J = i, need
        int need;
        if (S[i] < 0)
        {
            Poz[abs(S[i])].pop_front();
            need = Poz[abs(S[i]) + n].front();
            Poz[abs(S[i]) + n].pop_front();

            ans += need - i - 1 - nr_ofTaken(i + 1, need, Taken);
            Taken[need] = 1;
        
        }
        else
        {
            Poz[abs(S[i]) + n].pop_front();
            need = Poz[abs(S[i])].front();
            Poz[abs(S[i])].pop_front();

            ans += need - i - nr_ofTaken(i + 1, need, Taken);
            Taken[need] = 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...