Submission #172925

#TimeUsernameProblemLanguageResultExecution timeMemory
172925VEGAnnLongest beautiful sequence (IZhO17_subsequence)C++14
0 / 100
3 ms504 KiB
#include <bits/stdc++.h> //#pragma GCC optimize ("unroll-loops") //#pragma GCC optimize ("-O3") //#pragma GCC optimize ("Ofast") #define sz(x) ((int)x.size()) #define PB push_back #define all(x) x.begin(),x.end() using namespace std; const int N = 100100; //const int N2 = N * N; const int PW = 8; const int VL = (1 << PW) + 1; const int oo = 2e9; vector<int> vc; int n, a[N], k[N], pr[N], f[N], ans = 0, nm = -1, ff[VL], loc[VL]; bool ok(int x, int y){ return (__builtin_popcount(a[x] & a[y]) == k[y]); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); // freopen("in.txt","r",stdin); cin >> n; for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < n; i++) cin >> k[i]; fill(loc, loc + VL, -1); for (int i = 0; i < n; i++) { f[i] = 1; // for (int j = i - 1; j >= 0; j--) // if (f[j] + 1 > f[i] && ok(j, i)){ // f[i] = f[j] + 1; // pr[i] = j; // } for (int j = 0; j < VL; j++){ if (loc[j] < 0) continue; if (f[loc[j]] + 1 > f[i] && ok(loc[j], i)){ f[i] = f[loc[j]] + 1; pr[i] = loc[j]; } } if (f[i] > ans){ ans = f[i]; nm = i; } if (f[i] > ff[a[i]]){ ff[a[i]]= f[i]; loc[a[i]] = i; } } for (;;){ vc.PB(nm + 1); if (f[nm] == 1) break; nm = pr[nm]; } reverse(all(vc)); cout << sz(vc) << '\n'; for (int x : vc) cout << x << " "; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...