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 <bits/stdc++.h>
#include "molecules.h"
using namespace std;
#define MOD 1000000007
#define ll long long int
#define vi vector<int>
#define vii vector< vector<int> >
#define PI 3.1415926535897932384626433832795
#define INF 9223372036854775807LL
#define hashA 1257958787
#define hashB 1539500609
#define endl "\n"
vector<int> find_subset(int l, int u, vector<int> w) {
int n = w.size();
vector<pair<ll,int> > vec (n);
ll sum = 0;
vector<int> ans;
for(int i = 0; i < n; i++) {
vec[i] = {w[i],i};
if(l <= w[i] && w[i] <= u) {
ans.push_back(i);
return ans;
}
sum+= w[i];
}
sort(vec.begin(),vec.end());
if(vec[0].first > u || sum < l) {
return ans;
}
ll minsum = 0;
ll maxsum = 0;
for(int cn = 1; cn <= n; cn++) {
minsum+= vec[cn-1].first;
maxsum+= vec[n-cn].first;
if(minsum > u) {
break;
}
if(maxsum < l) {
continue;
}
if(minsum >= l) {
for(int i = 0; i < cn; i++) {
ans.push_back(vec[i].second);
}
break;
}
if(maxsum <= u) {
for(int i = 0; i < cn; i++) {
ans.push_back(vec[n-1-i].second);
}
break;
}
queue<int> que;
for(int i = 0; i < cn; i++) {
que.push(vec[i].second);
}
for(int j = 0; j < cn && minsum < l; j++) {
que.pop();
que.push(vec[n-1-j].second);
minsum-= vec[j].first;
minsum+= vec[n-1-j].first;
}
while(!que.empty()) {
ans.push_back(que.front());
que.pop();
}
}
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... |