# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1264821 | Art | Detecting Molecules (IOI16_molecules) | C++20 | 0 ms | 0 KiB |
// - Art -
#include "molecules"
#include <bits/stdc++.h>
#define el cout << '\n'
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; ++i)
#define REV(i, b, a) for (int i = (b), _a = (a); i >= _a; --i)
#define REP(i, c) for (int i = 0, _c = (c); i < _c; ++i)
const int N = 2e5 + 7;
using namespace std;
int idx[N];
int find_subset(int l, int r, int w[], int n, int result[]) {
int it = 0;
long long sum = 0;
REP (i, n) {
idx[i] = i;
}
sort(idx, idx + n, [&](int i, int j) {
return w[i] < w[j];
});
REP (i, n) {
sum += w[idx[i]];
while (sum > r) {
sum -= w[idx[it++]];
}
if (l <= sum) {
int sz = 0;
FOR (j, it, i) {
result[sz++] = idx[j];
}
return i - it + 1;
}
}
return 0;
}
#ifndef ONLINE_JUDGE
int w[N], result[N];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, l, r;
cin >> n >> l >> r;
REP (i, n) {
cin >> w[i];
}
int m = find_subset(l, r, w, n, result);
cout << m, el;
REP (i, m) {
cout << result[i] << ' ';
}
return 0;
}
#endif // ONLINE_JUDGE