Submission #491639

#TimeUsernameProblemLanguageResultExecution timeMemory
491639ljubaDetecting Molecules (IOI16_molecules)C++17
9 / 100
1 ms292 KiB
#include "molecules.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; vector<int> find_subset(int l, int u, vector<int> w) { vector<int> v = w; int n = (int)v.size(); vector<int> redosled(n); iota(redosled.begin(), redosled.end(), 0); sort(redosled.begin(), redosled.end(), [&](int a, int b) { return v[a] < v[b]; }); sort(v.begin(), v.end()); vector<ll> pref(n); for(int i = 0; i < n; ++i) { pref[i] = v[i]; if(i+1 >= 0) pref[i] += pref[i-1]; } vector<ll> suf(n); for(int i = n-1; i >= 0; --i) { suf[i] = v[i]; if(i+1 < n) suf[i] += suf[i+1]; } if(v.back() >= l && v.back() <= u) { vector<int> ans{redosled.back()}; return ans; } for(int i = n-1; i >= 0; --i) { ll uzmi = suf[i]; if(uzmi >= l && uzmi <= u) { vector<int> ans; for(int j = i; j < n; ++j) { ans.push_back(redosled[j]); } sort(ans.begin(), ans.end()); return ans; } ll preostalo = l-suf[i]; auto it = lower_bound(pref.begin(), pref.end(), preostalo); if(it == pref.end()) continue; int ind = it - pref.begin(); if(ind >= i) continue; if(pref[ind] + suf[i] <= u) { vector<int> ans; for(int j = 0; j <= ind; ++j) { ans.push_back(redosled[j]); } for(int j = i; j < n; ++j) { ans.push_back(redosled[j]); } sort(ans.begin(), ans.end()); return ans; } } vector<int> ans; 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...