제출 #1348337

#제출 시각아이디문제언어결과실행 시간메모리
1348337ykilraArranging Shoes (IOI19_shoes)C++20
100 / 100
55 ms16300 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long

const int N = 4e5+50;

struct bit{
    ll val[N];
    void add(int id, int x) {
        while (id < N) {
            val[id] += x;
            id += id & -id;
        }
    }
    int query(int id) {
        int sum = 0;
        while (id > 0) {
            sum += val[id];
            id -= id & -id;
        }
        return sum;
    }
}b;

ll n, a[N], ans;
vector<int> v[N];
bool paired[N];

long long count_swaps(vector<int> S) {
    int n = S.size();
    for (int i = 1; i <= n; i++) {
        a[i] = S[i-1];
        v[a[i]+n].push_back(i);
        b.add(i,1);
    }
    for (int i = n; i >= 1; i--) {
        if (paired[i]) continue;
        v[a[i]+n].pop_back();
        int pos = v[n-a[i]].back();
        v[n-a[i]].pop_back();
        paired[pos] = 1;
        b.add(pos,-1);
        ans += b.query(i-1) - b.query(pos-1);
        if (a[i] < 0) ans++; // left foot
    }
    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...