# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1269046 | raymoo_ | Longest beautiful sequence (IZhO17_subsequence) | C++17 | 0 ms | 0 KiB |
#pragma GCC optimize("O3")
#pragma GCC optimize("O1")
#pragma GCC optimize("O1")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#pragma GCC target("avx")
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define fi first
#define se second
#define ldb long double
#define pii pair<int, int>
#define bend(v) v.begin(), v.end()
const int N = 2e5 + 5, M = 1e6 + 5;
const int mod = 1e9 + 7;
const int base = 311;
const int inf = INT_MAX;
const ll INF = LLONG_MAX;
int n, a[N], k[N];
pii dp[N];
vector<int> d[25];
void solve(){
cin>>n;
for(int i = 1; i <= n; i++) cin>>a[i];
for(int i = 1; i <= n; i++) cin>>k[i];
pii ans = {0, 0};
for(int i = 1; i <= n; i++){
dp[i] = {1, i};
int cb = __builtin_popcount(a[i]);
// if(cb < k[i]) continue;
for(int v = k[i]; v <= 20; v++){
for(int j : d[v]){
if(__builtin_popcount(a[i] & a[j]) == k[i]){
dp[i] = max(dp[i], {dp[j].fi + 1, j});
}
}
}
ans = max(ans, {dp[i].fi, i});
d[cb].push_back(i);
}
// for(int i = 1; i <= n; i++) cout<<"!!! "<<dp[i].fi<<" "<<dp[i].se<<'\n';
cout<<ans.fi<<'\n';
vector<int> idk;
int cur = ans.se;
while(dp[cur].se != cur){
idk.push_back(cur);
cur = dp[cur].se;
}
idk.push_back(cur);
reverse(idk.begin(), idk.end());
for(int x : idk) cout<<x<<" ";
}
signed main(){
// freopen(".inp", "r", stdin);
// freopen(".out", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int tc = 1;
// cin>>tc;
while(tc--) solve();
}