Submission #571082

#TimeUsernameProblemLanguageResultExecution timeMemory
5710821neDetecting Molecules (IOI16_molecules)C++14
0 / 100
1 ms304 KiB
#include <cstdio> #include <vector> #include <cassert> #include<bits/stdc++.h> #include "molecules.h" using namespace std; std::vector<int> find_subset(int l, int u, std::vector<int> arr) { int n = (int)arr.size(); vector<int>order(n); iota(order.begin(),order.end(),0); sort(order.begin(),order.end(),[&](int i,int j){ return arr[i]<arr[j]; }); multiset<int>brr; for (int i = 0;i<n;++i)brr.insert(arr[i]); int j = 0; long long sum = 0; vector<int>ans; deque<int>cur; while(j<n){ if (sum>=l && sum<=u)break; if (!brr.empty()){ auto it = brr.lower_bound(l - sum); if (it == brr.end())--it; if (sum + *it >=l && sum + *it<=u){ for (auto x:cur){ ans.push_back(x); } for (int p = 0;p<n;++p){ if (!cur.empty() && p>=cur.front() && p <=cur.back())continue; if (arr[order[p]] == *it){ ans.push_back(order[p]); return ans; } } } } if (sum + arr[order[j]] <=u){ sum+=arr[order[j]]; cur.push_back(order[j]); brr.erase(brr.find(arr[order[j]])); ++j; } else{ sum-=arr[cur.front()]; brr.insert(arr[cur.front()]); cur.pop_front(); } } 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...