Submission #234819

#TimeUsernameProblemLanguageResultExecution timeMemory
234819muhammad_hokimiyonLongest beautiful sequence (IZhO17_subsequence)C++14
0 / 100
9 ms1792 KiB
#include <bits/stdc++.h>

//#pragma GCC optimize("Ofast")

#define fi first
#define se second
#define ll long long
#define dl double long

using namespace std;

const int NN = 2e6 + 7;
const int N = 1e6 + 7;
const int M = 22;
const int mod = 998244353;
const ll inf = 1e18 + 7;
const dl rf = 1e-14;
const int B = sqrt(N);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int n;
int a[N];
int k[N];
pair < int , int > dp[N];
pair < int , int > d[(1 << 10)][(1 << 10)][10];

void solve1()
{
    cin >> n;
    pair < int , int > ans = {0 , 0};
    for( int i = 1; i <= n; i++ )cin >> a[i];
    for( int i = 1; i <= n; i++ )cin >> k[i];
    for( int i = 1; i <= n; i++ ){
        dp[i] = {1 , 0};
        int h1 = (a[i] >> 10);
        int h2 = (a[i] & ((1 << 10) - 1));
        for( int j = 0; j < (1 << 10); j++ ){
            int f = __builtin_popcount((h2 & j));
            if( k[i] - f >= 0 && k[i] - f <= 10 ){
                dp[i] = max( make_pair(d[j][h1][k[i] - f].fi + 1 , d[j][h1][k[i] - f].se) , dp[i] );
            }
        }
        for( int j = 0; j < (1 << 10); j++ ){
            d[h2][j][(j & h1)] = max( d[h2][j][(j & h1)] , make_pair(dp[i].fi , i) );
        }
        ans = max( ans , {dp[i].fi , i} );
    }
    cout << ans.fi << "\n";
    vector < int > res;
    while( ans.se != 0 ){
        res.push_back(ans.se);
        ans.se = dp[ans.se].se;
    }
    reverse( res.begin() , res.end() );
    for( auto x : res )cout << x << " ";
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    //freopen( "input.txt" , "r" , stdin );
    //freopen( "output.txt" , "w" , stdout );

    int cghf = 1;//cin >> cghf;
    while( cghf-- ){
        solve1();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...