毎回findするのは処理が重いので、標準入力からの読み込み時についでにindexをつけて上げればよいのでは?
#include <vector>
#include <algorithm>
#include <iostream>
#include <tuple>
using namespace std;
int main()
{
int n;
cin >> n;
vector<tuple<int, int, int>> cards(n);
for (int i = 0; i < n; i++)
{
int first, second;
cin >> first;
cin >> second;
cards.at(i) = make_tuple(first, second, i);
}
sort(cards.rbegin(), cards.rend());
vector<int> index;
int min = std::get<1>(cards[0]);
index.emplace_back(std::get<2>(cards[0])); // 一番強いカードは問答無用
for (int i = 1; i < n; i++)
{
const int cost = std::get<1>(cards[i]);
if (min < cost) {
//cards[i].first = -1; // costが大きいので消す
} else {
index.emplace_back(std::get<2>(cards[i]));
}
if (min > cost) {
min = cost;
}
}
const int sum = static_cast<int>(index.size());
cout << sum << endl;
sort(index.begin(), index.end());
for (int i : index) {
cout << (i + 1) << " ";
}
cout << endl;
return 0;
}
Like!