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;
typedef long long ll;
vector<int> find_subset(int l, int u, vector<int> w) {
vector<int> v = w;
int n = (int)v.size();
vector<int> redosled(n);
iota(redosled.begin(), redosled.end(), 0);
sort(redosled.begin(), redosled.end(), [&](int a, int b) {
return v[a] < v[b];
});
sort(v.begin(), v.end());
vector<ll> pref(n);
for(int i = 0; i < n; ++i) {
pref[i] = v[i];
if(i+1 >= 0) pref[i] += pref[i-1];
}
vector<ll> suf(n);
for(int i = n-1; i >= 0; --i) {
suf[i] = v[i];
if(i+1 < n) suf[i] += suf[i+1];
}
if(v.back() >= l && v.back() <= u) {
vector<int> ans{redosled.back()};
return ans;
}
for(int i = n-1; i >= 0; --i) {
ll uzmi = suf[i];
if(uzmi >= l && uzmi <= u) {
vector<int> ans;
for(int j = i; j < n; ++j) {
ans.push_back(redosled[j]);
}
sort(ans.begin(), ans.end());
return ans;
}
ll preostalo = l-suf[i];
auto it = lower_bound(pref.begin(), pref.end(), preostalo);
if(it == pref.end()) continue;
int ind = it - pref.begin();
if(ind >= i) continue;
if(pref[ind] + suf[i] <= u) {
vector<int> ans;
for(int j = 0; j <= ind; ++j) {
ans.push_back(redosled[j]);
}
for(int j = i; j < n; ++j) {
ans.push_back(redosled[j]);
}
sort(ans.begin(), ans.end());
return ans;
}
}
vector<int> 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... |