// Remember to check #define int long long
#include "molecules.h"
#include <bits/stdc++.h>
using namespace std;
#define lint long long
#define arr array
#define vec vector
#define pli pair<lint, int>
#define fir first
#define sec second
const int N = 2e5 + 5;
lint l, u;
int n;
arr<pli, N> a;
set<pli> ans;
set<pli> st;
int chck(int sz) {
st.clear();
lint sm = 0;
for (int i = 1; i <= sz; i++)
sm += a[i].fir, st.insert(a[i]);
if (l <= sm && sm <= u) { ans = st; return 1; }
if (u < sm) return 2;
for (int i = n - sz + 1; i <= n; i++) {
if (st.count(a[i])) continue;
sm -= st.begin()->fir, st.erase(st.begin());
sm += a[i].fir, st.insert(a[i]);
if (l <= sm && sm <= u) { ans = st; return 1; }
}
return 3;
}
void srch() {
int lw = 1, hg = n;
while (lw <= hg) {
int md = (lw + hg) / 2;
int rsp = chck(md);
if (rsp == 1) break;
else if (rsp == 2) hg = md - 1;
else lw = md + 1;
}
}
int cntr = 0;
vec<int> find_subset(int _l, int _u, vec<int> _a) {
cntr++; assert(cntr == 1);
l = _l, u = _u, n = _a.size();
for (int i = 1; i <= n; i++) a[i] = {_a[i - 1], i};
sort(a.begin() + 1, a.begin() + n + 1);
srch();
vec<int> rt;
for (pli x : ans) rt.push_back(x.sec - 1);
return rt;
// 0-indexed
}
컴파일 시 표준 에러 (stderr) 메시지
molecules.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~
molecules_c.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~
# | 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... |