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 <bits/stdc++.h>
#include "molecules.h"
#define ll long long
#define ld long double
#define sp ' '
#define en '\n'
#define smin(a, b) a = min(a, b)
#define smax(a, b) a = max(a, b)
using namespace std;
const int N = 1e5 + 2;
const int M = 1e9;
int mod = 1000000007;
vector<int> find_subset(int L, int R, vector<int> W) {
int n = W.size();
ll l = L;
ll r = R;
vector<ll> w(n);
for (int i = 0; i < n; i++) w[i] = W[i];
vector<int> order(n);
iota(order.begin(), order.end(), 0);
sort(order.begin(), order.end(), [&] (int i, int j) {
return w[i] < w[j];
});
ll sum = 0;
int kolko = 0;
for (int i : order) {
if (sum + w[i] <= r) {
sum += w[i];
kolko++;
}
}
vector<int> ans;
for (int i = 0; i < kolko; i++) {
ans.push_back(order[i]);
}
if (sum >= l) return ans;
ll fali = l - sum;
int lo = 0, hi = n - 1;
while (lo < kolko && kolko <= hi) {
ll delta = w[order[hi]] - w[order[lo]];
fali -= delta;
ans[lo] = order[hi];
if (fali <= 0) break;
lo += 1;
hi -= 1;
}
sum = 0;
for (int i = 0; i < kolko; i++) sum += w[ans[i]];
if (sum < l) return {};
return ans;
}
# | 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... |