Submission #491641

#TimeUsernameProblemLanguageResultExecution timeMemory
491641ljubaDetecting Molecules (IOI16_molecules)C++17
9 / 100
1 ms332 KiB
#include "molecules.h"

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

vector<int> find_subset(int l, int u, vector<int> w) {
    vector<int> v = w;
    int n = (int)v.size();

    vector<int> redosled(n);
    iota(redosled.begin(), redosled.end(), 0);
    sort(redosled.begin(), redosled.end(), [&](int a, int b) {
        return v[a] < v[b];
    });

    sort(v.begin(), v.end());
    vector<ll> pref(n);
    for(int i = 0; i < n; ++i) {
        pref[i] = v[i];
        if(i-1 >= 0) pref[i] += pref[i-1];
    }

    vector<ll> suf(n);

    for(int i = n-1; i >= 0; --i) {
        suf[i] = v[i];
        if(i+1 < n) suf[i] += suf[i+1];
    }

    if(v.back() >= l && v.back() <= u) {
        vector<int> ans{redosled.back()};
        return ans;
    }

    for(int i = n-1; i >= 0; --i) {
        ll uzmi = suf[i];
        if(uzmi >= l && uzmi <= u) {
            vector<int> ans;
            for(int j = i; j < n; ++j) {
                ans.push_back(redosled[j]);
            }
            sort(ans.begin(), ans.end());
            return ans;
        }

        ll preostalo = l-suf[i];
        auto it = lower_bound(pref.begin(), pref.end(), preostalo);
        if(it == pref.end()) continue;
        int ind = it - pref.begin();
        if(ind >= i) continue;
        if(pref[ind] + suf[i] <= u) {
            vector<int> ans;
            for(int j = 0; j <= ind; ++j) {
                ans.push_back(redosled[j]);
            }

            for(int j = i; j < n; ++j) {
                ans.push_back(redosled[j]);
            }
            sort(ans.begin(), ans.end());
            return ans;
        }
    }

    vector<int> ans;
    return ans;
}
#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...