Submission #170146

#TimeUsernameProblemLanguageResultExecution timeMemory
170146nvmdavaLongest beautiful sequence (IZhO17_subsequence)C++17
40 / 100
6080 ms10156 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 int a[N], k[N], ans[N], f[N]; int bit[1050000]; vector<int> fans[100005]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; for(int i = 1; i <= 1048576; ++i){ bit[i] = bit[-i & i ^ i] + 1; } for(int i = 1; i <= n; ++i) cin>>a[i]; for(int i = 1; i <= n; ++i){ cin>>k[i]; ans[i] = 1; } int mxid = 1; for(int i = 1; i <= n; ++i){ for(int j = ans[mxid]; j >= 1; --j){ for(auto& x : fans[j]){ if(bit[a[x] & a[i]] == k[i]){ f[i] = x; ans[i] = j + 1; break; } } if(ans[i] != 1) break; } if(ans[i] > ans[mxid]) mxid = i; fans[ans[i]].push_back(i); } cout<<ans[mxid]<<'\n'; vector<int> v; while(mxid){ v.push_back(mxid); mxid = f[mxid]; } while(!v.empty()){ cout<<v.back()<<' '; v.pop_back(); } }

Compilation message (stderr)

subsequence.cpp: In function 'int main()':
subsequence.cpp:27:25: warning: suggest parentheses around arithmetic in operand of '^' [-Wparentheses]
         bit[i] = bit[-i & i ^ i] + 1;
                      ~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...