제출 #822854

#제출 시각아이디문제언어결과실행 시간메모리
822854vjudge1Arranging Shoes (IOI19_shoes)C++17
100 / 100
105 ms70440 KiB
#include "shoes.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int tree[200200];

void update(int i, int val) {
    for(; i < 200200; i += -i&i) {
        tree[i] += val;
    }
}

int get(int x) {
    int ans = 0;
    for(; x; ans += tree[x], x ^= -x&x);
    return ans;
}

queue < int > q[100100];

ll count_swaps(vector< int > s) {
    int n = s.size();
    ll ans = 0;
    for(int i = 0, j; i < n; ++ i) {
        j = abs(s[i]);
        if(q[j].empty() || s[q[j].front()] == s[i]) {
            q[j].push(i);
        } else {
            ans += i - (q[j].front() + get(q[j].front() + 1)) - (s[i] > 0);
            update(q[j].front() + 1, 1);
            update(i + 1, -1);
            q[j].pop();
        }
    }
    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...