이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "molecules.h"
#include <cstdio>
#include <algorithm>
#include <utility>
#include <vector>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long int lld;
int n;
pair<lld, int> wi[200010];
bool chosen[200010];
vector<int> find_subset(int l, int u, vector<int> w) {
	n = (int) w.size();
	vector<int> ans;
	memset(chosen, false, sizeof chosen);
	for(int i=0;i<n;i++) wi[i] = make_pair(w[i], i);
	sort(wi, wi+n);
	lld sum = 0;
	int ind = n-1;
	for(int i=0;i<n;i++){
		if(sum+wi[i].first<=(lld)u){
			sum += wi[i].first;
			chosen[i] = true;
		}else{
			ind = i-1;
			break;
		}
	}
	if(ind==n-1){
		//cout <<"here"<<endl;
		if((lld)l<=sum&&sum<=(lld)u){
			for(int i=0;i<n;i++){
				ans.push_back(i);
			}
		}
		return ans;
	}
	if((lld)l<=sum&&sum<=(lld)u){
		for(int i=0;i<n;i++){
			if(chosen[i]){
				ans.push_back(wi[i].second);
			}
		}
		return ans;
	}
	int a = n-1;
	while(chosen[n-a-1]&&!chosen[a]){
		//cout << "here " << a << endl;
		sum += wi[a].first-wi[n-a-1].first;
		chosen[a] = true; chosen[n-a-1] = false;
		if((lld)l<=sum&&sum<=(lld)u){
			for(int i=0;i<n;i++){
				if(chosen[i]){
					ans.push_back(wi[i].second);
				}
			}
			return ans;
		}
		a--;
	}
	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... |