Submission #888409

#TimeUsernameProblemLanguageResultExecution timeMemory
888409pccLongest beautiful sequence (IZhO17_subsequence)C++14
40 / 100
83 ms2908 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pll pair<ll,ll> #define pii pair<int,int> #define fs first #define sc second #define tlll tuple<ll,ll,ll> const int mxn = 1e5+10; int n; int arr[mxn],brr[mxn]; namespace small{ pii dp[mxn]; void GO(){ dp[0] = make_pair(0,0); for(int i = 1;i<=n;i++){ dp[i] = make_pair(1,0); for(int j = i-1;j>=0;j--){ if(__builtin_popcount(arr[j]&arr[i]) == brr[i]){ dp[i] = max(dp[i],{dp[j].fs+1,j}); } } } int now= max_element(dp,dp+n+1)-dp; int cnt = dp[now].fs; vector<int> v; while(now){ v.push_back(now); now = dp[now].sc; } reverse(v.begin(),v.end()); cout<<cnt<<'\n'; for(auto &i:v)cout<<i<<' '; return; } } namespace big{ int pre[mxn]; vector<int> v; pii dp[1<<8]; void GO(){ for(int i = 1;i<=n;i++){ pii big = {0,0}; for(int j = 0;j<(1<<8);j++){ if(__builtin_popcount(arr[i]&j) != brr[i])continue; big = max(big,dp[j]); } pre[i] = big.sc; dp[arr[i]] = max(dp[arr[i]],{big.fs+1,i}); } int now = max_element(dp,dp+(1<<8))->sc; while(now){ v.push_back(now); now = pre[now]; } reverse(v.begin(),v.end()); cout<<v.size()<<'\n'; for(auto &i:v)cout<<i<<' '; return; } } int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n; for(int i = 1;i<=n;i++)cin>>arr[i]; for(int i = 1;i<=n;i++)cin>>brr[i]; if(n<=5050)small::GO(); else big::GO(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...