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;
std::vector<int> find_subset(int l, int u, std::vector<int> arr) {
int n = arr.size();
int64_t sum = 0;
int need = -1;
multiset<int>brr;
for(int i = 0;i<n;++i){
sum+=arr[i];
brr.insert(arr[i]);
}
vector<int>ans;
if (sum<l){
return ans;
}
bool ok=false;
vector<bool>visited(n+1,false);
int ll = 0,r = 0;
sum = 0;
while(ll<n){
sum+=arr[ll];
brr.erase(brr.find(arr[ll]));
++ll;
while(r<ll&&sum>u){
sum-=arr[r];
brr.insert(arr[r]);
++r;
}
if (sum>=l&&sum<=u){
for (int i = r;i<ll;++i){
visited[i] = true;
ok=true;
need = -1;
}
break;
}
auto temp = brr.lower_bound(l - sum);
if (temp!=brr.end()&&sum + *temp >= l && sum + *temp<=u){
for (int i = r;i<ll;++i){
visited[i] = true;
ok=true;
need = *temp;
}
break;
}
}
//cout<<need<<'\n';
if (ok){
for (int i = 0;i<n;++i){
if (visited[i]){
ans.push_back(i);
}
}
if (need!=-1){
for (int i = 0;i<n;++i){
if (!visited[i]&&arr[i]==need){
ans.push_back(i);
break;
}
}
}
}
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... |