Submission #1252049

#TimeUsernameProblemLanguageResultExecution timeMemory
1252049rcllLongest beautiful sequence (IZhO17_subsequence)C++20
100 / 100
4791 ms55120 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN=1e5,B=1<<10; int n,a[MAXN],k[MAXN],p[MAXN],dp[21][B][B],g[21][B][B]; array<int,2> res; signed main() { cin.tie(0)->sync_with_stdio(0); cin >> n; for (int i=0; i<n; i++) { cin >> a[i]; } for (int i=0; i<n; i++) { cin >> k[i]; int curr=1,req,x=(a[i]&(B-1)),r=(a[i]^x)>>10; p[i]=-1; for (int l=0; l<B; l++) { req=k[i]-__builtin_popcount(l&x); if (0<=req && curr<=dp[req][r][l]){ curr=dp[req][r][l]+1; p[i]=g[req][r][l]; } } for (int j=0; j<B; j++){ req=__builtin_popcount(j&r); if (dp[req][j][x]<curr){ dp[req][j][x]=curr; g[req][j][x]=i; } } res=max(res,{curr,i}); } cout << res[0] << '\n'; int ans[res[0]]; for (int i=0; i<res[0]; i++) { ans[i]=res[1]; res[1]=p[res[1]]; } for (int i=res[0]; --i>=0; ) { cout << ans[i]+1 << ' '; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...