Submission #1237101

#TimeUsernameProblemLanguageResultExecution timeMemory
1237101Ghulam_JunaidArranging Shoes (IOI19_shoes)C++20
100 / 100
302 ms146988 KiB
#include <bits/stdc++.h>
#include "shoes.h"
// #include "grader.cpp"
using namespace std;

typedef long long ll;

const int N = 2e5 + 10;
int fen[N];

void add(int p){
    for (int i = p + 1; i < N; i += i & -i)
        fen[i] += 1;
}

int get(int p){
    int res = 0;
    for (int i = p + 1; i > 0; i -= i & -i)
        res += fen[i];
    return res;
}

ll count_swaps(vector<int> s) {
    int n = s.size();

    map<int, queue<int>> inds;
    for (int i = 0; i < n; i ++)
        inds[s[i]].push(i);

    bool mark[n] = {};
    ll ans = 0;
    for (int cur = 0; cur < n; cur ++){
        if (mark[cur]) continue;
        
        int val = s[cur];
        int ind = inds[-val].front();
        while (mark[ind]){
            inds[-val].pop();
            ind = inds[-val].front();
        }

        int del = get(ind) - get(cur);
        ans += ind - cur - 1 - del + (s[cur] > 0);

        mark[cur] = mark[ind] = 1;
        add(ind);
    }
	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...