이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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;
vector<int>order(n);
iota(order.begin(),order.end(),0);
sort(order.begin(),order.end(),[&](int i,int j){
return arr[i]<arr[j];
});
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[order[ll]];
brr.erase(brr.find(arr[order[ll]]));
++ll;
while(r<ll&&sum>u){
sum-=arr[order[r]];
brr.insert(arr[order[r]]);
++r;
}
if (sum>=l&&sum<=u){
for (int i = r;i<ll;++i){
visited[order[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[order[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... |