| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1290848 | Faisal_Saqib | Longest beautiful sequence (IZhO17_subsequence) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
const int N=1e6;
int a[N],k[N];
int dp[N],mx[N][22],bk[N][22];
int main()
{
ios::sync_with_stdio(0);
cout.tie(0);
cin.tie(0);
int n;
cin>>n;
int mx=(1<<8);
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>=mx)
{
cout<<0<<endl;
return 0;
}
}
for(int i=1;i<=n;i++)
{
cin>>k[i];
}
for(int i=1;i<=n;i++)
{
// mx[mask][k] = max value of dp[i] such that popcount(mask & a[i]) = k
dp[i]=mx[a[i]][k[i]]+1;
bk[i][21]=bk[a[i]][k[i]];
for(int j=0;j<(1<<8);j++)
{
int pc = __builtin_popcount(a[i]&j);
if(dp[i]>mx[j][pc])
{
mx[j][pc]=dp[i];
bk[j][pc]=i;
}
}
}
int k=max_element(dp+1,dp+n+1)-dp;
cout<<dp[k]<<endl;
vector<int> cur;
while(k>0)
{
cur.push_back(k);
k=bk[k][21];
}
while(cur.size()){cout<<cur.back()<<' ';cur.pop_back();}
cout<<endl;
return 0;
}
