제출 #218948

#제출 시각아이디문제언어결과실행 시간메모리
218948yayupsDetecting Molecules (IOI16_molecules)C++11
19 / 100
5 ms512 KiB
// created 01 FEB 2018
// updated JUNE 2018
// updated JULY 2018
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <cstring>
#include <map>
#include <cstdlib>
#include <ctime>
#include <cassert>
#include <bitset>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <list>
#include <stdexcept>

#define N 200000

using namespace std;

vector<int> find_subset(int l, int u, vector<int> w) {
	int n=w.size();
	vector<int> v(n);
	vector<int> result;
	v[0]=w[0];
	//cout << v[0] << endl;
	for(int i=1;i<n;i++) {
		v[i] = v[i-1]+w[i];
		//cout <<  v[i]<< endl;
	}
	
	vector<int>::iterator low,up;
	
	int a,b=0;
	int t;
	
	//it's going to be v[b]-v[a]
	for(a=-1;a<n;a++) {
		if(a==-1) {
			t=0;
		}
		else {
			t=v[a];
		}
		low=lower_bound(v.begin(),v.end(),l+t);
		up =upper_bound(v.begin(),v.end(),u+t);
		//cout << "for a = " << a << " we have low = "<<low-v.begin()<<" and up= "<<up-v.begin() << endl;
		if(low-v.begin()<=up-v.begin()) {
			b=low-v.begin();
			if(v[b]-v[a]>=l and v[b]-v[a]<=u) break;
			//cout  << a;
		}
	}
	//cout  << a<<endl<<b<<endl;
	result.clear();
	if(a==n) {
		return result;
	}
	
	for(int i=0;i<b-a;i++) {
		result.push_back(a+1+i);
	}
	
	//cout << a << endl;
	
	return result;
}
#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...