This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
// 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> ww) {
vector<int> w;
for(int i=0;i<ww.size();i++) w.push_back(ww[i]);
sort(w.begin(),w.end());
int n=w.size();
//need to find sorting bijection
vector<int> A(n);
map<int,int> mults;
map<int,int>::iterator it;
for(int i=0;i<n;i++) {
A[i]=lower_bound(w.begin(),w.end(),ww[i])-w.begin();
it=mults.find(ww[i]);
if(it==mults.end()) {
mults.insert(pair<int,int>(ww[i],1));
}
else {
A[i] = A[i]+ mults[ww[i]];
mults[ww[i]]++;
}
}
vector<int> B(n);
for(int i=0;i<n;i++) {
B[A[i]]=i;
}
//real solution
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]-t>=l and v[b]-t<=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(B[a+1+i]);
}
//cout << a << endl;
return result;
}
Compilation message (stderr)
molecules.cpp: In function 'std::vector<int> find_subset(int, int, std::vector<int>)':
molecules.cpp:31:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<ww.size();i++) w.push_back(ww[i]);
~^~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |