[BOJ] 1974번 Jump Jump Championship
12/21/2025 · 1 min read
BOJPS
[P5] Jump Jump Championship
정석적인 LIS + 역추적 문제에서 약간 변형이다.
vector<int> LIS(const vector<int>& v){
int n = si(v);
vector<int> pos(n), lis, res;
for(int i = 0; i < n; i++){
if(lis.empty() or lis.back() < v[i]){
lis.push_back(v[i]); pos[i] = si(lis);
}
else{
int idx = lower_bound(all(lis), v[i]) - lis.begin();
lis[idx] = v[i], pos[i] = idx + 1;
}
}
int len = si(lis);
for(int i = n - 1; i >= 0; i--) if(pos[i] == len) res.push_back(i),len--;
reverse(all(res));
return res;
}
void solve(){
int tc; cin >> tc;
while(tc--){
int n; cin >> n;
vector<int> v(n);
for(auto& i : v) cin >> i;
auto res = LIS(v);
cout << si(res) << "\n";
for(const auto& i : res) cout << i + 1 << " ";
cout << "\n";
}
}