Submission #272556

#TimeUsernameProblemLanguageResultExecution timeMemory
272556toonewbieDetecting Molecules (IOI16_molecules)C++17
100 / 100
75 ms7272 KiB
#include "molecules.h" #include <bits/stdc++.h> #define F first #define S second using namespace std; vector<int> find_subset(int l, int u, vector<int> w) { vector <pair <int, int>> v; int n = w.size(); for (int i = 0; i < n; i++) { v.push_back({w[i], i}); } sort(v.begin(), v.end()); vector <long long> pref(n + 1); pref[n] = 0; pref[0] = v[0].F; for (int i = 1; i < n; i++) { pref[i] += pref[i - 1] + v[i].F; } pair <int, int> res = {-1, -1}; for (int i = 0; i < n; i++) { int lf = i, rg = n - 1, best = -1; while (rg - lf >= 0) { int mid = (lf + rg) >> 1; long long sum = pref[mid] - pref[(i == 0 ? n : i - 1)]; if (1LL * l <= sum && sum <= 1LL * u) { best = mid; break; } if (sum < l) { lf = mid + 1; } else if (sum > u) { rg = mid - 1; } } if (best != -1) { res = {i, best}; break; } } if (res.F == -1) { return vector<int>(); } vector <int> ans; for (int i = res.F; i <= res.S; i++) { ans.push_back(v[i].S); } return ans; }
#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...