Submission #523843

#TimeUsernameProblemLanguageResultExecution timeMemory
523843pakhomoveeArranging Shoes (IOI19_shoes)C++17
10 / 100
1 ms204 KiB
#include "shoes.h"
#include <cmath>

using namespace std;

struct fenwick {
    vector<int> f;
    
    void init(int n) {
        f.assign(n, 0);
    }
    
    int get(int i) {
        int ans = 0;
        while (i >= 0) {
            ans += f[i];
            i = (i & (i + 1)) - 1;
        }
        return ans;
    }
    
    void upd(int i, int n, int val) {
        while (i < n) {
            f[i] += val;
            i = i | (i + 1);
        }
    }
};

long long count_swaps(std::vector<int> s) {
    const int n = s.size();
    long long ans = 0;
    vector<vector<int>> idPlus(n);
    vector<vector<int>> idMinus(n);
    for (int i = 0; i < n; ++i) {
        if (s[i] > 0) {
            idPlus[abs(s[i])].push_back(i);
        } else {
            idMinus[abs(s[i])].push_back(i);
        }
    }
    fenwick ft;
    ft.init(n + 1);
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < idPlus[i].size(); ++j) {
            idPlus[i][j] += ft.get(idPlus[i][j]);
            idMinus[i][j] += ft.get(idMinus[i][j]);
            if (idPlus[i][j] > idMinus[i][j]) {
                ans += -(idMinus[i][j] - idPlus[i][j]) - 1;
            } else {
                ans += -(idPlus[i][j] - idMinus[i][j]);
            }
            int l = min(idPlus[i][j], idMinus[i][j]);
            int r = max(idPlus[i][j], idMinus[i][j]);
            ft.upd(l, n + 1, 1);
            ft.upd(r, n + 1, -1);
        }
    }
    return ans;
}

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:45:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |         for (int j = 0; j < idPlus[i].size(); ++j) {
      |                         ~~^~~~~~~~~~~~~~~~~~
#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...