제출 #1335627

#제출 시각아이디문제언어결과실행 시간메모리
1335627mattartaArranging Shoes (IOI19_shoes)C++20
50 / 100
1096 ms29520 KiB
#include "shoes.h"
#include <bits/stdc++.h>

#ifdef DEBUG
    #define debug(...) println(clog, __VA_ARGS__)
#else
    #define debug(...)
#endif

#define forall(i, s, e) for(int i=(s); i<(e); i++)

#define sz(x) (int)(x).size()

using namespace std;

using ll = long long;

using vi = vector<int>;
using vl = vector<ll>;
using vb = vector<bool>;

using aii = array<int, 2>;
using all = array<ll, 2>;


ll count_swaps(vi s) {
    int N = s.size();
    map<int, vi> Mp;
    set<int> S;

    forall(i, 0, N) {
        S.insert(abs(s[i]));
        Mp[s[i]].push_back(i);
    }

    vector<aii> rng;

    ll ans = 0;

    for(int i:S) {
        vi &pos = Mp[i];
        vi &neg = Mp[-i];

        assert(pos.size() == neg.size());

        forall(j, 0, sz(pos)) {
            ans += abs(pos[j]-neg[j]) - 1 + (pos[j]<neg[j]);

            int l=pos[j], r=neg[j];
            if(l>r) swap(l,r);

            rng.push_back({l,r});
        }
    }

    sort(rng.begin(), rng.end());

    S.clear();
    for(auto [l,r]:rng) {
        while(!S.empty() && (*S.begin())<l)
            S.erase(S.begin());
        ans -= distance(S.begin(), S.lower_bound(r));
        S.insert(r);
    }

    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...