제출 #1294552

#제출 시각아이디문제언어결과실행 시간메모리
1294552LIALongest beautiful sequence (IZhO17_subsequence)C++17
0 / 100
1 ms336 KiB
// // Created by liasa on 23/11/2025. // #include <bits/stdc++.h> using namespace std; #define ll long long #define v vector #define lp(i, s, e) for (int i = s; i < e; ++i) int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; v<int> a(n), k(n); lp(i, 0, n) cin >> a[i]; lp(i, 0, n) cin >> k[i]; int ans = 0, idx = 0, mx = 257; v<v<int>> dp(n + 1, v<int>(mx, 1)); v<v<int>> pr(n + 1, v<int>(mx, -1)); set<int> in; lp(i, 1, n + 1) { dp[i] = dp[i - 1]; pr[i] = pr[i - 1]; ll val = a[i - 1]; for (auto it : in) { ll dpv = dp[i - 1][it]; ll andi = __builtin_popcount(it & val); if (andi == k[i - 1]) { if (dp[i][val] < dpv + 1) { dp[i][val] = dpv + 1; pr[i][val] = it; } } } in.insert(val); if (ans < dp[i][val]) { ans = dp[i][val]; idx = i; } } cout << ans << '\n'; ll cur_idx = idx; ll cur_num = a[idx - 1]; v<ll> ansi; while (cur_idx != 0 && cur_num != -1) { ll nxt = pr[cur_idx][cur_num]; ansi.push_back(cur_num); cur_num = nxt; cur_idx--; } reverse(ansi.begin(), ansi.end()); for (auto it : ansi) cout << it << " "; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...