Submission #885292

#TimeUsernameProblemLanguageResultExecution timeMemory
885292alexddLongest beautiful sequence (IZhO17_subsequence)C++17
100 / 100
2629 ms93776 KiB
#include<bits/stdc++.h> using namespace std; int n; int a[100005]; int k[100005]; int prec[100005]; int dp[100005]; int ult[1030][1030][22]; int pre1[1030]; signed main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=0;i<(1<<10);i++) pre1[i] = __builtin_popcount(i); int mxm=0,unde=-1; for(int i=1;i<=n;i++) { cin>>k[i]; dp[i] = 1; prec[i] = -1; int curle = (a[i]&((1<<10)-1)); int curri = ((a[i]-curle)>>10); for(int ule=0;ule<(1<<10);ule++) { int r = k[i] - pre1[ule&curle]; if(dp[i] < dp[ult[ule][curri][r]]+1) { prec[i] = ult[ule][curri][r]; dp[i] = dp[prec[i]]+1; } } for(int nri=0;nri<(1<<10);nri++) if(dp[i] > dp[ult[curle][nri][pre1[nri&curri]]]) ult[curle][nri][pre1[nri&curri]] = i; if(dp[i]>mxm) { mxm=dp[i]; unde=i; } } vector<int> sol; while(unde!=-1) { sol.push_back(unde); unde = prec[unde]; } cout<<sol.size()<<"\n"; for(int i=(int)sol.size()-1;i>=0;i--) cout<<sol[i]<<" "; 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...