Submission #1246729

#TimeUsernameProblemLanguageResultExecution timeMemory
1246729firegirlwaterboyLongest beautiful sequence (IZhO17_subsequence)C++20
100 / 100
2856 ms96080 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const ll MOD = 1e9 + 7; const ll N = (1 << 10); int dp[N][N][11], ind[N][N][11], bc[N][N]; void solve() { memset(dp, 0, sizeof(dp)), memset(ind, -1, sizeof(ind)); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { bc[i][j] = __builtin_popcount(i & j); } } int n; cin >> n; vector<int> a(n), k(n), p(n); for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < n; i++) { cin >> k[i]; } iota(p.begin(), p.end(), 0); int ans = 0, ai, len, extra; for (int i = 0; i < n; i++) { int l = a[i] >> (10), r = a[i] % (N); len = 1; for (int j = 0; j < N; j++) { extra = k[i] - bc[j][r]; if (extra < 0 || extra > 10) continue; if (len < (dp[j][l][extra] + 1)) { len = dp[j][l][extra] + 1; p[i] = ind[j][l][extra]; } } for (int j = 0; j < N; j++) { if (len > dp[r][j][bc[j][l]]) { dp[r][j][bc[j][l]] = len; ind[r][j][bc[j][l]] = i; } } if (len > ans) ans = len, ai = i; } cout << ans << "\n"; vector<int> temp; while (p[ai] != ai) { temp.push_back(ai); ai = p[ai]; } temp.push_back(ai); for (int i = ans - 1; i >= 0; i--) { cout << temp[i] + 1 << " \n"[i == 0]; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...