Submission #844730

#TimeUsernameProblemLanguageResultExecution timeMemory
844730Pa_shaLongest beautiful sequence (IZhO17_subsequence)C++17
100 / 100
5723 ms184764 KiB
#include <bits/stdc++.h> #define int long long #define endl '\n' using namespace std; constexpr int mod=1e9+7; array<int,2>dp[(1ll<<10)][(1ll<<10)][11]; void solve() { int n; cin>>n; int a[n],k[n]; int to[n]={0},ans=0; for(int i=0;i<n;i++) { cin>>a[i]; } for(int i=0;i<n;i++) { to[i]=-1; cin>>k[i]; } vector<int>res; int q=0; for(int i=0;i<n;i++) { int l=(a[i]>>10); int r=a[i]%(1ll<<10); int rs=1; for(int j=0;j<(1ll<<10);j++) { int nd=k[i]-__builtin_popcount(j&l); if(nd<0||nd>10) { continue; } if(dp[j][r][nd][0]+1>rs) { rs=dp[j][r][nd][0]+1; to[i]=dp[j][r][nd][1]; } } if(rs>ans) { ans=rs; q=i; } for(int j=0;j<(1ll<<10);j++) { if(rs>dp[l][j][__builtin_popcount(r&j)][0]) { dp[l][j][__builtin_popcount(r&j)][0]=rs; dp[l][j][__builtin_popcount(r&j)][1]=i; } } } while(q>-1) { res.push_back(q+1); q=to[q]; } reverse(res.begin(),res.end()); cout<<res.size()<<endl; for(int&i:res) { cout<<i<<" "; } cout<<endl; } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int t=1; // cin>>t; while(t--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...