# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
87695 | Retro3014 | Detecting Molecules (IOI16_molecules) | C++17 | 67 ms | 34644 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "molecules.h"
#include <vector>
#include <algorithm>
typedef long long ll;
struct S{
int x, y;
bool operator <(const S &a)const{
return y<a.y;
}
};
using namespace std;
#define MAX_N 200000
vector<int> ans;
vector<S> v;
ll sum1[MAX_N+10], sum2[MAX_N+10];
vector<int> find_subset(int l, int u, vector<int> w){
for(int i=0; i<w.size(); i++){
v.push_back({i, w[i]});
}
sort(v.begin(), v.end());
for(int i=0; i<v.size(); i++){
if(i==0){
sum1[i]=(ll)v[i].y;
}else{
sum1[i]=sum1[i-1]+(ll)v[i].y;
}
}
for(int i=(int)v.size()-1; i>=0; i--){
if(i==v.size()-1){
sum2[i]=(ll)v[i].y;
}else{
sum2[i]=sum2[i+1]+(ll)v[i].y;
}
}
int s=-1, e=0;
while(e<=v.size()){
if((s==-1?0:sum1[s])+sum2[e]>=(ll)l && (s==-1?0:sum1[s])+sum2[e]<=u){
break;
}
else if((s==-1?0:sum1[s])+sum2[e]<(ll)l){
if(s==e-1){
break;
}
s++;
}else{
e++;
}
}
if((s==-1?0:sum1[s])+sum2[e]>=(ll)l && (s==-1?0:sum1[s])+sum2[e]<=u){
for(int i=0; i<=s; i++){
ans.push_back(v[i].x);
}
for(int i=e; i<v.size(); i++){
ans.push_back(v[i].x);
}
}
return ans;
}
Compilation message (stderr)
# | 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... |