Submission #821345

#TimeUsernameProblemLanguageResultExecution timeMemory
821345KerimDetecting Molecules (IOI16_molecules)C++17
100 / 100
36 ms6332 KiB
#include "molecules.h" #include "bits/stdc++.h" #define ll long long using namespace std; vector<int> find_subset(int l, int u, vector<int> w) { int n = w.size(); vector<int> ind(n); for (int i = 0; i < n; i++) ind[i] = i; sort(ind.begin(), ind.end(), [&](int x, int y){ return (w[x] < w[y]); }); vector<int> answer; vector<ll> suf(n+1); suf[n] = 0; for (int i = n-1; i >= 0; i--) suf[i] = suf[i+1] + w[ind[i]]; ll pref_sum = 0; for (int i = 0; i < n; i++){ if (pref_sum > u) break; if (pref_sum >= l){ for (int h = 0; h < i; h++) answer.push_back(ind[h]); return answer; } int st = i, en = n-1; while (st <= en){ int mid = (st+en) >> 1; ll sum = pref_sum + suf[mid]; if (l <= sum and sum <= u){ for (int h = 0; h < i; h++) answer.push_back(ind[h]); for (int h = mid; h < n; h++) answer.push_back(ind[h]); return answer; } if (sum > u) st = mid + 1; else en = mid - 1; } pref_sum += w[ind[i]]; } return vector<int>{}; }
#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...