Submission #1159392

#TimeUsernameProblemLanguageResultExecution timeMemory
1159392PieArmyLongest beautiful sequence (IZhO17_subsequence)C++20
100 / 100
1372 ms51452 KiB
#include<bits/stdc++.h> using namespace std; int n; int arr[100023],k[100023]; int bit[1024][1024],dp[1024][1024][11]; int par[100023],ans[100023]; int mx=1; int main(){ ios_base::sync_with_stdio(0);cin.tie(0); cin>>n; for(int i=1;i<=n;i++){ cin>>arr[i]; } for(int i=1;i<=n;i++){ cin>>k[i]; } for(int i=0;i<1024;i++){ for(int j=0;j<1024;j++){ for(int l=0;l<10;l++){ bit[i][j]+=!!((1<<l)&(i&j)); } } } for(int i=1;i<=n;i++){ int a=(arr[i]>>10),b=(arr[i]&1023); ans[i]=1; for(int j=0;j<1024;j++){ int need=k[i]-bit[a][j]; if(need<0||need>10)continue; if(ans[dp[j][b][need]]+1>ans[i]){ par[i]=dp[j][b][need]; ans[i]=ans[par[i]]+1; } } for(int j=0;j<1024;j++){ if(ans[i]>ans[dp[a][j][bit[b][j]]]){ dp[a][j][bit[b][j]]=i; } } if(ans[i]>ans[mx])mx=i; } vector<int>v; cout<<ans[mx]<<endl; while(mx){ v.push_back(mx); mx=par[mx]; } while(v.size()){ cout<<v.back()<<" "; v.pop_back(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...