Submission #1341696

#TimeUsernameProblemLanguageResultExecution timeMemory
1341696PakinDioxideArranging Shoes (IOI19_shoes)C++17
50 / 100
15 ms3228 KiB
#include "shoes.h"
#include <bits/stdc++.h>
#define ll long long

using namespace std;

const int mxN = 1e5+5;

int fen[mxN], n;

void upd(int idx, int x) { for (int i = idx; i <= n; i += i & -i) fen[i] += x; }
int qr(int idx) { int x = 0; for (int i = idx; i > 0; i -= i & -i) x += fen[i]; return x; }

ll count_swaps(vector <int> a) {
    n = a.size();
    a.emplace_back(0);
    for (int i = n; i >= 1; i--) a[i] = a[i-1];
    map <int, deque <int>> mp;
    int x[n+1]; memset(x, 0, sizeof(x));
    for (int i = 1; i <= n; i++) upd(i, 1);
    for (int i = 1; i <= n; i++) mp[a[i]].emplace_back(i);
    ll ans = 0;
    for (int i = 1; i <= n; i++) if (!x[i]) {
        x[i] = 1;
        mp[a[i]].pop_front();
        int idx = mp[-a[i]].front(); mp[-a[i]].pop_front();
        x[idx] = 1;
        upd(idx, -1);
        ans += qr(idx) - qr(i) + (a[i] > 0);
    }
    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...