Submission #1223381

#TimeUsernameProblemLanguageResultExecution timeMemory
1223381dizzy_groovyRotating Lines (APIO25_rotate)C++20
100 / 100
87 ms8008 KiB
#include "rotate.h"
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <bits/stdc++.h>

using namespace std;
using namespace __gnu_pbds;

template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

/*int energy(int v, vector<int> &pref_l, vector<int> &pref_r, int cnt0, int cnt90, int l, int r) {
    
}*/

long long my_calc_energy(vector<int> &v){
    long long res = 0;
    for (int i = 0; i < (int) v.size(); i++){
        for (int j = i + 1; j < (int) v.size(); j++){
            int d = abs(v[i] - v[j]);
            res += std::min(d, 50000 - d);
        }
    }
    return res;
}

void energy(int n, std::vector<int> v) {
    ordered_set<pair<int, int>> v2;
    for (int i = 0; i < n; i++) {
        //v[i] = (v[i] - mi);
        //cout << i << endl;
        if (v2.lower_bound({(v[i] + 25000) % 50000, -1}) == v2.end() || v2.lower_bound({(v[i] + 25000) % 50000, -1})->first != ((v[i] + 25000) % 50000)) {
            v2.insert({v[i], i});
        } else {
            v2.erase(v2.lower_bound({(v[i] + 25000) % 50000, -1}));
        }
    }
    while (v2.size() > 1) {
        auto it = (*(v2.begin()));
        auto it2 = v2.find_by_order((v2.size()) / 2);
        auto tmp = (*it2);
        v2.erase(it);
        v2.erase(it2);
        rotate({tmp.second}, ((it.first + 75000 - tmp.first) % 50000));
    }
    return;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...