Submission #1343361

#TimeUsernameProblemLanguageResultExecution timeMemory
1343361retardeDetecting Molecules (IOI16_molecules)C++20
100 / 100
98 ms17428 KiB
#include "molecules.h"
#include <bits/stdc++.h>
using namespace std;

std::vector<int> find_subset(int l, int u, std::vector<int> v) {
    vector<int> ans; long long n = (int)v.size();
    for (int i = 0; i < (int)v.size(); i++) {
        if (v[i] >= l && v[i] <= u) {
            ans.push_back(i);
            return ans;
        }
    }

    vector<pair<long long, int>> w;
    for (int i = 0; i < n; i++) w.push_back({v[i], i});

    set<pair<long long, long long>> pfxs; pfxs.insert({0, 0});
    long long curp = 0;

    sort(w.begin(), w.end());
    for (long long i = 0; i < n; i++) {
        pfxs.insert({curp, i});
        curp += w[i].first;

        // lower bound pj - u
        auto it = pfxs.lower_bound({curp - u, -1e18});
        if (it != pfxs.end()) {
            pair<long long, long long> x = *it;
            if (x.first <= curp - l) {
                long long j = x.second;
                vector<int> tmpp;
                for (int z = j; z <= i; z++) {
                    tmpp.push_back(w[z].second);
                }
                return tmpp;
            }
        }

        // vector<long long> tmp; long long cs = 0;
        // for (long long j = i; j < n; j++) {
        //     cs += w[j].first;
        //     tmp.push_back(w[j].second);
        //     if (cs >= l && cs <= u) {
        //         return tmp;
        //     }
        // }
    }

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