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 namespace std;
vector<int> find_subset(int l, int u, std::vector<int> w) {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n = w.size();
vector <int> mn(n), mx(n);
for (int i = 0; i < n; i++) {
mn[i] += w[i];
mx[i] += w[n - i - 1];
if (i > 0) {
mn[i] += mn[i-1];
mx[i] += mx[i-1];
}
}
vector <int> ans;
if (mx.back() >= l && mx.back() <= u) {
for (int i = 0; i < n; i++)
ans.push_back(i);
return ans;
}
for (int i = 0; i < n; i++) {
if (mn[i] >= l && mn[i] <= u) {
for (int j = 0; j <= i; j++)
ans.push_back(j);
return ans;
}
auto it = lower_bound(mx.begin(), mx.end(), l - mn[i]);
if (it != mx.end() && mn[i] + *it >= l && mn[i] + *it <= u && int(it - mx.begin()) + i + 1 < n) {
for (int j = 0; j <= i; j++)
ans.push_back(j);
int x = it - mx.begin();
for (int j = 0; j < x; j++)
ans.push_back(n - j - 1);
return ans;
}
}
for (int i = 0; i < n; i++) {
if (mx[i] >= l && mx[i] <= u) {
for (int j = 0; j <= i; j++)
ans.push_back(n - j - 1);
return ans;
}
auto it = lower_bound(mn.begin(), mn.end(), l - mx[i]);
if (it != mn.end() && mx[i] + *it >= l && mx[i] + *it <= u && int(it - mn.begin()) + i + 1 < n) {
int x = it - mn.begin();
for (int j = 0; j < x; j++)
ans.push_back(j);
for (int j = 0; j <= i; j++)
ans.push_back(n - j - 1);
return ans;
}
}
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... |