Submission #1294569

#TimeUsernameProblemLanguageResultExecution timeMemory
1294569LIALongest beautiful sequence (IZhO17_subsequence)C++17
0 / 100
1 ms444 KiB
//
// Created by liasa on 23/11/2025.
//
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define v vector
#define lp(i, s, e) for (int i = s; i < e; ++i)
#define pll pair<ll, ll>
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  int n;
  cin >> n;
  v<int> a(n), k(n);
  lp(i, 0, n) cin >> a[i];
  lp(i, 0, n) cin >> k[i];

  int mx = 300;
  v<int> dp(mx, 1);
  v<ll> pr(mx, -1);
  vector<ll> last(mx + 1, -1);
  set<ll> idx_in;
  v<ll> par_idx(n + 1, -1);

  ll st_idx = 0, ans = 0;
  lp(i, 1, n + 1) {
    ll val = a[i - 1];
    int cur = 1;
    ll par = -1;

    for (auto idx : idx_in) {
      ll num = a[idx - 1];
      ll cnt = __builtin_popcount(num & val);
      if (cnt == k[i - 1]) {
        if (cur < dp[num] + 1) {
          cur = dp[num] + 1;
          par = idx;
        }
      }
    }

    par_idx[i] = par;

    if (ans < cur) {
      ans = cur;
      st_idx = i;
    }

    if (last[val] != -1) {
      ll idxr = last[val];
      idx_in.erase(idxr);
    }
    idx_in.insert(i);
    last[val] = i;
    if (dp[val] < cur) {
      dp[val] = cur;
      pr[val] = i;
    }
  }

  cout << ans << "\n";
  v<ll> ansi;
  while (st_idx >= 1) {
    ansi.push_back(st_idx);
    st_idx = par_idx[st_idx];
  }
  reverse(ansi.begin(), ansi.end());
  for (auto it : ansi) {
    cout << it << " ";
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...