제출 #1364947

#제출 시각아이디문제언어결과실행 시간메모리
1364947yavor_ptvArranging Shoes (IOI19_shoes)C++20
100 / 100
312 ms148364 KiB
#include <bits/stdc++.h>
#include "shoes.h"
#define ll long long
//#include "grader.cpp"

using namespace std;

vector <int> v;
vector <ll> fenwick;

void update(ll idx)
{
    for (int i = idx; i < (ll)fenwick.size(); i = (i | (i + 1)))
    {
        fenwick[i]++;
    }
}

ll query(ll idx)
{
    ll res = 0;
    for (int i = idx; i >= 0; i = (i & (i + 1)) - 1)
    {
        res += fenwick[i];
    }
    return res;
}

ll query(ll a, ll b)
{
    if (a > b) return 0;
    if (a == 0) return query(b);
    return query(b) - query(a - 1);
}

long long count_swaps(vector<int> s)
{
    v = s;
    ll n = v.size();
    ll ptr = 0, ans = 0;
    fenwick.assign(n + 2, 0);
    map <ll, queue<ll>> mp;
    for (int i = 0; i < n; i++)
    {
        mp[v[i]].push(i);
    }
    while (ptr < n)
    {
        if (query(ptr, ptr) == 1)
        {
            ptr++;
            continue;
        }
        ll pos = mp[-v[ptr]].front();
        mp[v[ptr]].pop();
        mp[-v[ptr]].pop();
        ll removed = query(ptr + 1, pos - 1);
        ans += (pos - ptr - 1) - removed;
        if (v[ptr] > 0) ans++;
        update(pos);
        ptr++;

    }
    return ans;
}

/*
2
2 1 -1 -2

4

3
-2 2 2 -2 -2 2
1


*/
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…