제출 #1364602

#제출 시각아이디문제언어결과실행 시간메모리
1364602takoshanavaArranging Shoes (IOI19_shoes)C++20
0 / 100
0 ms344 KiB
#include "shoes.h"
#include <bits/stdc++.h>
//#define int long long
#define pb push_back
#define fs first
#define sc second
using namespace std;

const int N = 1e5 + 5;
long long n, bit[N];

void upd(int idx, long long val){
    while(idx <= N){
        bit[idx] += val;
        idx += idx & -idx;
    }
}

long long get(int idx){
    long long res = 0;
    while(idx > 0){
        res += bit[idx];
        idx -= idx & -idx;
    }
    return res;
}

long long count_swaps(vector<int> s){
    n = s.size();
    map<int, deque<int>> lft, rgh;

    vector<int> tr(n);
    int id = 0;

    for(int i = 0; i < n; i++){
        int x = s[i];
        int sz = abs(x);
        if(x > 0){
            if(!rgh[sz].empty()){
                int j = rgh[sz].front();
                rgh[sz].pop_front();
                id++;
                tr[j] = 2 * id, tr[i] = 2 * id - 1;
            }else{
                lft[sz].pb(i);
            }
        }else{
            if(!lft[sz].empty()){
                int j = lft[sz].front();
                lft[sz].pop_front();
                id++;
                tr[j] = 2 * id - 1, tr[i] = 2 * id;
            }else{
                rgh[sz].pb(i);
            }
        }
    }

    long long ans = 0;
    for(int i = 0; i < n; i++){
        ans += i - get(tr[i]);
        upd(tr[i], 1);
    }
    return ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…