(UPD: 2024-12-04 14:48 UTC) Judge is not working due to Cloudflare incident. (URL) We can do nothing about it, sorry. After the incident is resolved, we will grade all submissions.

Submission #170155

#TimeUsernameProblemLanguageResultExecution timeMemory
170155nvmdavaLongest beautiful sequence (IZhO17_subsequence)C++17
100 / 100
4405 ms97712 KiB
#include <bits/stdc++.h> #pragma GCC optimize("unroll-loops") #pragma GCC optimize("Ofast") #pragma GCC target("fma,avx2") using namespace std; #define ll long long #define ff first #define ss second mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #define INF 0x3f3f3f3f #define MOD 1000000007 #define N 100005 #define LIM 1024 int a[N], k[N], ans[N], f[N]; int bit[1050000]; int dp[LIM][LIM][11], fr[LIM][LIM][11]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, mxid = 1; cin>>n; for(int i = 1; i <= 1048576; ++i) bit[i] = __builtin_popcount(i); for(int i = 1; i <= n; ++i) cin>>a[i]; for(int i = 1; i <= n; ++i) cin>>k[i]; for(int i = 1; i <= n; ++i){ ans[i] = 1; int l = a[i] >> 10; int r = a[i] - (l << 10); for(int j = 0; j < LIM; ++j){ int q = k[i] - bit[l & j]; if(q < 0 || q > 10) continue; if(ans[i] <= dp[j][r][q]) ans[i] = dp[j][r][q] + 1, f[i] = fr[j][r][q]; } if(ans[i] > ans[mxid]) mxid = i; for(int j = 0; j < LIM; ++j){ int q = bit[j & r]; if(dp[l][j][q] < ans[i]) dp[l][j][q] = ans[i], fr[l][j][q] = i; } } cout<<ans[mxid]<<'\n'; vector<int> v; while(mxid){ v.push_back(mxid); mxid = f[mxid]; } reverse(v.begin(), v.end()); for(auto& x : v) cout<<x<<' '; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...