#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |