Submission #690590

#TimeUsernameProblemLanguageResultExecution timeMemory
690590zeroesandonesDetecting Molecules (IOI16_molecules)C++17
100 / 100
61 ms8724 KiB
#include "bits/stdc++.h"
#include "molecules.h"

using namespace std;

using ll = long long;
using pi = pair<long long, long long>;
using vi = vector<long long>;

#define pb emplace_back

vector<int> find_subset(int l, int u, vector<int> w) {
    int n = w.size();
    vector<pi> val;
    for(int i = 0; i < n; ++i) {
        val.pb(w[i], i);
    }

    sort(val.begin(), val.end());
    pi ans = {-1, -1};

    vi pref(n);
    for(int i = 0; i < n; ++i) {
        pref[i] = val[i].first;
        if(i) pref[i] += pref[i - 1];
    }

    for(int i = 0; i < n; ++i) {
        if(pref[i] < l) continue;
        if(pref[i] <= u) {
            ans = {0, i};
            break;
        }
        ll req = pref[i] - u;
        auto it = lower_bound(pref.begin(), pref.end(), req) - pref.begin();
        if(it > i) continue;
        ll sum = pref[i] - pref[it];
        if(l <= sum && sum <= u) {
            ans = {it + 1, i};
            break;
        }
    }

    vector<int> res;

    pi bad = {-1, -1};
    if(ans == bad) {
        return res;
    }

    for(int i = ans.first; i <= ans.second; ++i) {
        res.pb(val[i].second);
    }

    return res;
}
#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...