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"
#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef long long ll;
#define f first
#define s second
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define sz(x) (int)x.size()
#define all(x) begin(x), end(x)
#define rsz resize
const int md = 1e9+7;
const ll inf = 1e18;
const int maxn = 2e5+5;
template<class T> void ckmin(T &a, T b) { a = min(a, b); }
template<class T> void ckmax(T &a, T b) { a = max(a, b); }
vector<int> w;
vector< ii > foo;
vector<int> get(int a, int b)
{
vi res;
for(int i = a; i<= b; i++) res.pb(foo[i].s);
return res;
}
vector<int> find_subset(int l, int u, vector<int> W) {
int n = W.size();
for(int i = 0; i< n; i++) foo.pb(ii(W[i], i));
sort(foo.begin(), foo.end());
sort(W.begin(), W.end());
w = W;
ll run = 0;
int dat = -1;
for(int i = 0; i< n; i++)
{
run += w[i];
if(run>= l)
{
dat = i;
break;
}
}
if(run<= u) return get(0, dat);
ll cur = 0;
for(int i = 0; i< dat; i++) cur += w[i];
if(l<= cur && cur<= u) return get(0, dat-1);
for(int i = 1; i+dat-1< n; i++)
{
cur -= w[i-1];
cur += w[i+dat-1];
if(l<= cur && cur<= u) return get(i, i+dat-1);
}
return vector<int>(0);
}
# | 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... |