제출 #523374

#제출 시각아이디문제언어결과실행 시간메모리
523374HappyPacManArranging Shoes (IOI19_shoes)C++14
100 / 100
363 ms25860 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 15;
int BIT[MAXN];

void upd(int u){
    u+=5;
    for(;u<MAXN;u+=u&(-u)) BIT[u]++;
}
int qry(int u){
    u+=5;
    int rt = 0;
    for(;u>0;u-=u&(-u)) rt += BIT[u];
    return rt;
}

long long count_swaps(std::vector<int> s) {
    map<int,vector<int> > mp;
    int N = s.size();
    for(int i=N-1;i>=0;i--){
        mp[s[i]].push_back(i);
    }
    long long res = 0;
    for(int i=0;i<N;i++){
        if(qry(i)-qry(i-1) == 1) continue;
        int ref = mp[-s[i]].back();
        mp[-s[i]].pop_back();
        if(s[i] > 0) res += ref-qry(ref-1)+qry(i)-i;
        else res += ref-qry(ref-1)+qry(i)-i-1;
        mp[s[i]].pop_back();
        upd(i);
        upd(ref);
    }
    return res;
}
#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...