제출 #1100476

#제출 시각아이디문제언어결과실행 시간메모리
1100476Zero_OPDetecting Molecules (IOI16_molecules)C++14
100 / 100
48 ms7868 KiB
#include <bits/stdc++.h>

using namespace std;

vector<int> find_subset(int l, int u, vector<int> w){
    vector<pair<int, int>> ids;
    for(int i = 0; i < (int)w.size(); ++i){
        ids.push_back({w[i], i});
    }

    sort(ids.begin(), ids.end());
    int n = (int)w.size();
    vector<long long> pref(n);

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

    auto sum = [&](int i, int j) -> long long{
        return pref[j] - (i > 0 ? pref[i - 1] : 0);
    };

    for(int i = 0, j = 0; i < n; ++i){
        while(j < n && sum(i, j) < l) ++j;

        if(j == n) return {};
        if(sum(i, j) <= u){
            vector<int> res;
            for(int k = i; k <= j; ++k){
                res.push_back(ids[k].second);
            }
            return res;
        }
    }

    return {};
}

#ifdef LOCAL
int main(){
    vector<int> A = {6, 8, 8, 7};
    vector<int> a = find_subset(15, 17, A);
    for(int x : a) cout << x << ' '; cout << '\n';

    vector<int> b = find_subset(14, 15, {5, 5, 6, 6});
    for(int x : b) cout << x << ' '; cout << '\n';

    vector<int> c = find_subset(10, 20, {15, 17, 16, 18});
    for(int x : c) cout << x << ' '; cout << '\n';
}
#endif
#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...