This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define N 100005
#define fi first
#define se second
#define M 10
typedef pair<int, int> ii;
int n, a[N], k[N], cbit[(1 << M) + 1][(1 << M) + 1], par[N];
ii dp[(1 << M) + 1][(1 << M) + 1][M + 1];
int get(int msk){
    int rt = 0;
    for (int pos = 0; pos < M; pos++) rt += (msk >> pos) & 1;
    return rt;
}
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
        
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int j = 1; j <= n; j++) cin >> k[j];
    for (int msk = 0; msk < 1 << M; msk++){
        for (int msk2 = 0; msk2 < 1 << M; msk2++){
            int cur = msk & msk2;
            cbit[msk][msk2] = get(cur);
        }
    }
    ii res = {0, 0};
    for (int i = 1; i <= n; i++){
        ii best = {0, 0};
        int l = a[i] >> M;
        int r = a[i] % (1 << M);
        for (int msk = 0; msk < 1 << M; msk++){
            int cal = k[i] - cbit[l][msk];
            if  (cal < 0 || cal > M) continue;
            if (dp[msk][r][cal].fi > best.fi){
                best = dp[msk][r][cal];
            }
        }
        best.fi++;
        par[i] = best.se;
        best.se = i;
        for (int msk = 0; msk < 1 << M; msk++){
            int cur = cbit[msk][r];
            if (cur < 0 || cur > M) continue;
            if (dp[l][msk][cur].fi < best.fi){
                dp[l][msk][cur] = best;
            }
        }
        res = max(res, best);
    }
    vector<int> ans;
    int pos = res.se;
    while (pos){
        ans.push_back(pos);
        pos = par[pos];
    }
    cout << ans.size() << "\n";
    for (int i = (int) ans.size() - 1; i >= 0; i--) cout << ans[i] << " " ;
    return 0;
}     
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |