Submission #1144936

#TimeUsernameProblemLanguageResultExecution timeMemory
1144936MunkhturErdenebatArranging Shoes (IOI19_shoes)C++20
10 / 100
0 ms328 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;

long long count_swaps(vector<int> s) {
    int n = s.size();
    unordered_map<int, vector<int>> vas;
    unordered_map<int, int> mee;
    unordered_map<int, int> visited;
    vector<int> vii;
    for (int i = 0; i < n; i++) {
        vas[s[i]].push_back(i);
    }

    long long sum = 0;
    
    for (int i = 0; i < n; i++) {
        if (visited[i] == 0) {
            int l = 0, r = vii.size() - 1, g;
            while (l < r) {
                int m = (l + r - 1) / 2;
                if (vii[m] > i) {
                    r = m;
                } else {
                    l = m + 1;
                }
            }
            g = l;

            l = 0, r = vii.size() - 1;
            while (l < r) {
                int m = (l + r + 1) / 2;
                if (vii[m] > vas[-s[i]][mee[-s[i]]]) {
                    r = m - 1;
                } else {
                    l = m;
                }
            }
            vii.push_back(vas[-s[i]][mee[-s[i]]]);
            sort(vii.begin(), vii.end());
            sum += vas[-s[i]][mee[-s[i]]]-i-l + g -1;
            if(s[i]>0){
                sum++;
            }
            visited[vas[-s[i]][mee[-s[i]]]] = 1;
            mee[s[i]]++;
            mee[-s[i]]++;
        }
    }

    return sum;
}
#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...