This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "molecules.h"
#include <bits/stdc++.h>
using i64 = long long int;
std::vector<int> find_subset(int _l, int _r, std::vector<int> _w) {
std::vector <i64> a(_w.begin(), _w.end());
i64 l = _l, r = _r;
int n = (int) a.size();
std::vector <int> ord(n); std::iota(ord.begin(), ord.end(), 0);
std::sort(ord.begin(), ord.end(), [&] (int i, int j) -> bool { return a[i] < a[j]; });
int k = 0;
int pos_l = 0, pos_r = n - 1;
i64 sum_l = 0, sum_r = 0;
for (k = 1; k <= n; k += 1) {
sum_l += a[ord[pos_l++]];
sum_r += a[ord[pos_r--]];
if (sum_l <= r and l <= sum_r)
break;
}
if (k == n + 1)
return {};
i64 sum = 0;
for (int i = 0; i < k; i += 1) {
sum += a[ord[i]];
}
for (int x = 0, y = k; y <= n; x += 1, y += 1) {
if (l <= sum and sum <= r) {
return std::vector <int> (ord.begin() + x, ord.begin() + y);
}
sum -= a[ord[x]];
if (y < n)
sum += a[ord[y]];
}
return {};
}
#ifdef ILOVELAMTER
int main(void) {
std::vector <int> a = find_subset(10, 20, {15, 17, 16, 18});
for (int x : a)
std::cerr << x << ' ';
}
#endif // ILOVELAMTER
# | 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... |