제출 #1025963

#제출 시각아이디문제언어결과실행 시간메모리
1025963vaneaArranging Shoes (IOI19_shoes)C++14
100 / 100
267 ms17492 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include "shoes.h"
using namespace std;
using namespace __gnu_pbds;
using ll = long long;

template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

ll count_swaps(vector<int> v) {
    int n = v.size();
    ll ans = 0;
    multiset<array<int, 2>> m;
    for(int i = 0; i < n; i++) {
        m.insert({v[i], i});
    }
    map<int, bool> vis;
    ordered_set<int> past;
    for(int i = 0; i < n; i++) {
        if(vis[i]) continue;
        auto it = m.lower_bound({-v[i], -1});
        int idx = (*it)[1];
        int mn = past.order_of_key(idx)-past.order_of_key(i);
        vis[i] = vis[idx] = true;
        m.erase(it);
        m.erase({v[i], i});
        if(v[i] > 0) {
            ans += (idx-i)-mn;
        }
        else {
            ans += (idx-i-1)-mn;
        }
        past.insert(idx);
    }
    return ans;
}
/*
int main()
{
    ll ans = count_swaps({-2, -1, 2, 1});
    cout << 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...