Submission #673752

#TimeUsernameProblemLanguageResultExecution timeMemory
673752tbzardDetecting Molecules (IOI16_molecules)C++14
100 / 100
77 ms14484 KiB
#include <bits/stdc++.h>
using namespace std;

vector<int> find_subset(int l, int u, vector<int> w){
    int n = w.size();
    vector<pair<int, int> > w2;
    for(int i=0;i<n;i++){
        w2.push_back(make_pair(w[i], i));
    }
    sort(w2.begin(), w2.end());
    long long sum = 0;
    vector<int> ans;
    multiset<pair<int, int> > res;
    int j = 0;
    for(int i=0;i<n;i++){
        if(sum+w2[i].first > u) break;
        sum += w2[i].first;
        ans.push_back(w2[i].second);
        res.insert(w2[i]);
        j = i;
    }
    if(res.size() == 0) return vector<int>{};
    if(sum >= l) return ans;
    for(int i=j+1;i<n;i++){
        sum -= res.begin()->first;
        res.erase(res.begin());
        sum += w2[i].first;
        res.insert(w2[i]);
        if(sum >= l) break;
    }

    if(sum >= l){
        ans.clear();
        for(auto it:res){
            ans.push_back(it.second);
        }
        return ans;
    }

    return vector<int>{};
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...