제출 #582416

#제출 시각아이디문제언어결과실행 시간메모리
582416drdilyorDetecting Molecules (IOI16_molecules)C++17
100 / 100
53 ms3648 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/detail/standard_policies.hpp> #define allit(a) (a).begin(), (a).end() #define sz(a) ((int) (a).size()) #define cut(s) {cout << s << '\n'; return 0;} #include "molecules.h" using namespace std; using ll = long long; using vi = vector<int>; namespace pd = __gnu_pbds; template<typename K> using ordered_set = pd::tree<K, pd::null_type, less<K>, pd::rb_tree_tag, pd::tree_order_statistics_node_update>; template<typename... T> using hash_table = pd::gp_hash_table<T...>; const int INF = 1e9; const ll INFL = 1e18; const int N = 1e5; const int RANDOM = chrono::high_resolution_clock::now().time_since_epoch().count(); mt19937 rng(RANDOM); vi find_subset(int low, int up, vi w) { int n = w.size(); vi ix(n); for (int i = 0; i < n; i++) ix[i] = i; sort(allit(ix), [&](int i, int j) { return w[i] < w[j]; }); ll sum = 0; for (int r = 0, l = 0; r < n; r++) { sum += w[ix[r]]; while (l < r && sum > up) sum -= w[ix[l++]]; if (low <= sum && sum <= up) { vi res(r-l+1); for (int i = 0; i < sz(res); i++) res[i] = ix[l + i]; return res; } } return {}; }
#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...