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...