E. Accidental Victory
https://codeforces.com/problemset/problem/1490/E
This is a chanllenging problem on codeforces with a diffcuilty score of 1400.
It can be solved by using sort and greedy algorithms.
void solve(){
int n;
cin >> n;
vector<pair<int, int>> a(n);
for (int i = 0; i < n; ++i){
cin >> a[i].first;
a[i].second = i;
}
sort(a.rbegin(), a.rend());
vector<long long> suff(n + 1);
for (int i = n - 1; i >= 0; --i){
suff[i] = suff[i + 1] + a[i].first;
}
vector<int> ans{a[0].second + 1};
for (int i = 0; i < n - 1; ++i){
if (suff[i + 1] >= a[i].first){
ans.emplace_back(a[i + 1].second + 1);
}
else{
break;
}
}
sort(ans.begin(), ans.end());
cout << ans.size() << '\n';
for (int i = 0; i < int(ans.size()); ++i){
cout << ans[i] << " \n"[i == ans.size() - 1];
}
}