Submission #573832

#TimeUsernameProblemLanguageResultExecution timeMemory
573832MohamedFaresNebiliDetecting Molecules (IOI16_molecules)C++14
100 / 100
50 ms6188 KiB
#include <bits/stdc++.h>
#include "molecules.h"
#include <ext/pb_ds/assoc_container.hpp>
 
        using namespace std;
        using namespace __gnu_pbds;
 
        using ll = long long;
        using ii = pair<int, int>;
        using vi = vector<int>;
 
        #define pb push_back
        #define pp pop_back
        #define ff first
        #define ss second
        #define lb lower_bound
 
        typedef tree<int, null_type, less<int>, rb_tree_tag,
            tree_order_statistics_node_update> indexed_set;
 
        vector<int> find_subset(int l, int u, vector<int> w) {
            vector<ii> arr; int n = w.size(); vector<int> result;
            for(int l = 0; l < n; l++)
                arr.pb({w[l], l});
            sort(arr.begin(), arr.end());
            ll curr = 0, k = 0;
            for(int i = 0; i < n; i++) {
                if(curr + arr[i].ff <= u) {
                    curr += arr[i].ff;
                    result.pb(arr[i].ss); k++;
                }
                else break;
            }
            if(curr >= l && curr <= u) return result;
            for(int i = 0; i < k && n - i - 1 >= k; i++) {
                if(curr + arr[n - i - 1].ff - arr[i].ff <= u) {
                    curr += arr[n - i - 1].ff - arr[i].ff;
                    result[i] = arr[n - i - 1].ss;
                }
                else break;
            }
          	if(curr < l || curr > u) result.clear();
            return result;
        }
#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...