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 <vector>
#include <cassert>
#include <algorithm>
using namespace std;
bool check(long long l,long long u,long long val) {
	return val>=l&&val<=u;
}
std::vector<int> find_subset(int l, int u, std::vector<int> w) {
	int n=w.size();
	vector<pair<int,int>> tbl(n);
	vector<long long> qsl(n);
	vector<long long> qsr(n);
	for (int i=0;i<n;i++) {
		tbl[i]={w[i],i};
	}
	sort(tbl.begin(),tbl.end());
	for (int i=0;i<n;i++) {
		qsl[i]=tbl[i].first;
		if (i) qsl[i]+=qsl[i-1];
	}
	for (int i=n-1;i>=0;i--) {
		qsr[i]=tbl[i].first;
		if (i<n-1) qsr[i]+=qsr[i+1];
	}
	vector<int> ans;
	long long ll;
	long long rr;
	for (int i=1;i<=n;i++) {
		if (qsr[n-i]<l) continue;
		if (qsl[i-1]>u) continue;
		for (int j=0;j<=i;j++) {
			ll=j?qsl[j-1]:0;
			rr=(j==i)?0:qsr[n-i+j];
			if (check(l,u,ll+rr)) {
				for (int k=0;k<j;k++) {
					ans.push_back(tbl[k].second);
				}
				for (int k=0;k<i-j;k++) {
					ans.push_back(tbl[n-k-1].second);
				}
				return ans;
			}
		}
		assert(false);
	}
    return std::vector<int>(0);
}
| # | 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... |