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 <cstdio>
#include <vector>
#include <cassert>
#include<bits/stdc++.h>
#include "molecules.h"
using namespace std;
std::vector<int> find_subset(int l, int u, std::vector<int> arr) {
int n = (int)arr.size();
vector<int>order(n);
iota(order.begin(),order.end(),0);
sort(order.begin(),order.end(),[&](int i,int j){
return arr[i]<arr[j];
});
multiset<int>brr;
for (int i = 0;i<n;++i)brr.insert(arr[i]);
int j = 0;
long long sum = 0;
vector<int>ans;
deque<int>cur;
while(j<n){
if (sum>=l && sum<=u)break;
if (!brr.empty()){
auto it = brr.lower_bound(l - sum);
if (it == brr.end())--it;
if (sum + *it >=l && sum + *it<=u){
for (auto x:cur){
ans.push_back(x);
}
for (int p = 0;p<n;++p){
if (!cur.empty() && p>=cur.front() && p <=cur.back())continue;
if (arr[order[p]] == *it){
ans.push_back(order[p]);
return ans;
}
}
}
}
if (sum + arr[order[j]] <=u){
sum+=arr[order[j]];
cur.push_back(order[j]);
brr.erase(brr.find(arr[order[j]]));
++j;
}
else{
sum-=arr[cur.front()];
brr.insert(arr[cur.front()]);
cur.pop_front();
}
}
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... |