제출 #1265515

#제출 시각아이디문제언어결과실행 시간메모리
1265515PlayVoltzLongest beautiful sequence (IZhO17_subsequence)C++20
0 / 100
1 ms1096 KiB
#include <cstdio> #include <stdio.h> #include <stdbool.h> #include <iostream> #include <map> #include <vector> #include <climits> #include <stack> #include <string> #include <queue> #include <algorithm> #include <set> #include <unordered_set> #include <unordered_map> #include <cmath> #include <cctype> #include <bitset> #include <iomanip> #include <cstring> #include <numeric> #include <cassert> using namespace std; #define int long long #define pii pair<int, int> #define mp make_pair #define pb push_back #define fi first #define se second pii dp[(1<<10)+5][(1<<10)+5][15]; int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; vector<pii> ans(n+1, mp(0, 0)), vect(n+1); for (int i=1; i<=n; ++i)cin>>vect[i].fi; for (int i=1; i<=n; ++i)cin>>vect[i].se; pii mx=mp(0, 0); for (int i=1; i<=n; ++i){ int l=(vect[i].fi>>10), r=(vect[i].fi&((1<<10)-1)); for (int mask=0; mask<(1<<10); ++mask){ int c=vect[i].se-__builtin_popcountll((l&mask)); if (c<0||c>10)continue; if (dp[mask][r][c].fi+1>ans[i].fi)ans[i]=mp(dp[mask][r][c].fi+1, dp[mask][r][c].se); } if (ans[i].fi>mx.fi)mx=mp(ans[i].fi, i); for (int mask=0; mask<(1<<10); ++mask){ int c=__builtin_popcountll((r&mask)); if (ans[i].fi>dp[l][mask][c].fi)dp[l][mask][c]=mp(ans[i].fi, i); } } stack<int> res; while (mx.se)res.push(mx.se), mx.se=ans[mx.se].se; cout<<res.size()<<"\n"; while (res.size())cout<<res.top()<<" ", res.pop(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...