Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- std::vector<size_t> Solve(std::vector<Player>& players) {
- std::sort(players.begin(), players.end(), CompareBySkill());
- size_t left = 0;
- size_t right = 1;
- size_t curr_best_left = 0;
- size_t curr_best_right = 0;
- uint64_t curr_sum = players[0].skill;
- uint64_t best_sum = curr_sum;
- while (right < players.size()) {
- curr_sum += players[right].skill;
- while ((left < right - 1) &&
- (static_cast<uint64_t>(players[left].skill) + players[left + 1].skill <
- static_cast<uint64_t>(players[right].skill))) {
- curr_sum -= players[left].skill;
- left++;
- }
- if (curr_sum > best_sum) {
- best_sum = curr_sum;
- curr_best_left = left;
- curr_best_right = right;
- }
- right++;
- }
- std::cout << best_sum << "\n";
- std::vector<size_t> answer(curr_best_right - curr_best_left + 1);
- for (size_t i = curr_best_left; i <= curr_best_right; ++i) {
- answer[i - curr_best_left] = players[i].index;
- }
- std::sort(answer.begin(), answer.end());
- return answer;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement