Submission #1227221

#TimeUsernameProblemLanguageResultExecution timeMemory
1227221AlmontherLongest beautiful sequence (IZhO17_subsequence)C++20
40 / 100
70 ms5956 KiB
#include<bits/stdc++.h>

#define ll long long
#define co cout<<

using namespace std;
// stuff
const int maxn=1e5+5,maxa=1e6+5;
ll valgroup[maxa],mxgroup[maxa];
ll arr[maxn],val[maxn],par[maxn],k[maxn];
vector<ll>ans;
void ret(ll node){
    if(par[node]!=-1) ret(par[node]);
    ans.push_back(node);
}
void solve(){
    ll n;
    cin>>n;
    for(int i=0;i<n;i++) cin>>arr[i];
    for(int i=0;i<n;i++) cin>>k[i];
    pair<ll,ll>mx={0,0};
    if(n<=5000){
        for(int i=0;i<n;i++){
            val[i]=1;
            par[i]=-1;
            for(int j=0;j<i;j++){
                if(val[j]+1>val[i]&&__popcount(arr[i]&arr[j])==k[i]){
                    val[i]=val[j]+1,par[i]=j,mx=max(mx,{val[i],i});
                }
            }
        }
    }
    else{
        for(int i=0;i<n;i++){
            val[i]=1;
            par[i]=-1;
            for(int j=0;j<(1<<8);j++){
                if(__popcount(j&arr[i])==k[i]){
                    if(valgroup[j]+1>val[i]){
                        val[i]=valgroup[j]+1,mx=max(mx,{val[i],i}),par[i]=mxgroup[j];
                    }
                }
            }
            if(valgroup[arr[i]]<val[i]){
                valgroup[arr[i]]=val[i];
                mxgroup[arr[i]]=i;
            }
        }
    }
    ret(mx.second);
    co ans.size()<<'\n';
    for(auto i:ans) co i+1<<' ';
}
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int _=1;
    // cin>>_;
    while(_--) 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...