Submission #489171

#TimeUsernameProblemLanguageResultExecution timeMemory
4891711neDetecting Molecules (IOI16_molecules)C++14
19 / 100
1 ms296 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;
    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[ll];
       brr.erase(brr.find(arr[ll]));
       ++ll;
       while(r<ll&&sum>u){
       	sum-=arr[r];
       	brr.insert(arr[r]);
       	++r;
       }
       if (sum>=l&&sum<=u){
   	for (int i = r;i<ll;++i){
       		visited[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[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...