Submission #489172

#TimeUsernameProblemLanguageResultExecution timeMemory
4891721neDetecting Molecules (IOI16_molecules)C++14
100 / 100
174 ms13584 KiB
#include "molecules.h" #include<bits/stdc++.h> using namespace std; std::vector<int> find_subset(int l, int u, std::vector<int> arr) { int n = arr.size(); int64_t sum = 0; int need = -1; multiset<int>brr; vector<int>order(n); iota(order.begin(),order.end(),0); sort(order.begin(),order.end(),[&](int i,int j){ return arr[i]<arr[j]; }); for(int i = 0;i<n;++i){ sum+=arr[i]; brr.insert(arr[i]); } vector<int>ans; if (sum<l){ return ans; } bool ok=false; vector<bool>visited(n+1,false); int ll = 0,r = 0; sum = 0; while(ll<n){ sum+=arr[order[ll]]; brr.erase(brr.find(arr[order[ll]])); ++ll; while(r<ll&&sum>u){ sum-=arr[order[r]]; brr.insert(arr[order[r]]); ++r; } if (sum>=l&&sum<=u){ for (int i = r;i<ll;++i){ visited[order[i]] = true; ok=true; need = -1; } break; } auto temp = brr.lower_bound(l - sum); if (temp!=brr.end()&&sum + *temp >= l && sum + *temp<=u){ for (int i = r;i<ll;++i){ visited[order[i]] = true; ok=true; need = *temp; } break; } } //cout<<need<<'\n'; if (ok){ for (int i = 0;i<n;++i){ if (visited[i]){ ans.push_back(i); } } if (need!=-1){ for (int i = 0;i<n;++i){ if (!visited[i]&&arr[i]==need){ ans.push_back(i); break; } } } } 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...