Submission #154589

#TimeUsernameProblemLanguageResultExecution timeMemory
154589juckterArranging Shoes (IOI19_shoes)C++14
45 / 100
73 ms9448 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> ii;

const int MAXN = 2e5 + 5;
int BIT[MAXN];

void upd(int p, int v) {
    for(; p < MAXN; p += (p & -p)) BIT[p] += v;
}

int sum(int p) {
    int tot = 0;
    for(; p; p -= (p & -p))
        tot += BIT[p];
    return tot;
}

long long count_swaps(vector<int> s) {
    int n = s.size() / 2;
    vector<vector<int>> positions(n + 1);
    fill(BIT, BIT + MAXN, 0);
    for(int i = 1; i <= 2*n; i++)
        upd(i, 1);
    for(int i = 2*n - 1; i >= 0; i--)
        if(s[i] > 0) positions[s[i]].push_back(i);
    long long ans = 0;
    for(int i = 0; i < 2*n; i++) {
        if(s[i] < 0) {
            ans += sum(i);
            upd(i + 1, -1);
            int p = positions[-s[i]].back();
            positions[-s[i]].pop_back();
            ans += sum(p);
            upd(p + 1, -1);
        }
    }
    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...