Submission #680936

#TimeUsernameProblemLanguageResultExecution timeMemory
680936lev1106Longest beautiful sequence (IZhO17_subsequence)C++17
100 / 100
3827 ms84596 KiB
#include <iostream> #include <vector> #include <bit> #include <algorithm> #define y1 qweqwe using namespace std; int n, i, kx, mx, cur, a[100001], p[100001]; char k[100001]; short x, y, x1, y1; pair<int, int> dp[1024][1024][10], ans; vector<int> ansv; signed main() { cin.tie(0)->sync_with_stdio(0); #ifdef LOCAL freopen("input.txt", "r", stdin); #endif cin >> n; for (i = 1; i <= n; i++) cin >> a[i]; for (i = 1; i <= n; i++) cin >> cur, k[i] = cur; for (i = 1; i <= n; i++) { cur = (a[i] & 1023); x = cur; cur = (a[i] >> 10); y = cur; mx = 1; for (cur = 0; cur < 1024; cur++) { x1 = cur; kx = k[i] - __popcount(x & x1); if (kx < 0 || kx >= 10) continue; if (dp[x1][y][kx].first + 1 >= mx) { mx = dp[x1][y][kx].first + 1; p[i] = dp[x1][y][kx].second; } } for (cur = 0; cur < 1024; cur++) { y1 = cur; kx = __popcount(y & y1); if (kx < 0 || kx >= 10) continue; if (mx > dp[x][y1][kx].first) dp[x][y1][kx] = {mx, i}; } if (mx > ans.first) ans = {mx, i}; //cout << x << " " << y << " " << p[i] << "\n"; } cout << ans.first << "\n"; cur = ans.second; while (cur > 0) { ansv.push_back(cur); cur = p[cur]; } reverse(ansv.begin(), ansv.end()); for (int i : ansv) cout << i << " "; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...