Submission #798616

#TimeUsernameProblemLanguageResultExecution timeMemory
798616farhan132Longest beautiful sequence (IZhO17_subsequence)C++17
7 / 100
41 ms4180 KiB
/***Farhan132***/ // #pragma GCC optimize("Ofast,fast-math") // #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma") // #pragma GCC optimization ("unroll-loops") #include <bits/stdc++.h> using namespace std; typedef int ll; typedef double dd; typedef pair<ll , ll> ii; typedef tuple < ll, ll, ll > tp; #define ff first #define ss second #define pb push_back #define in insert #define bug printf("**!\n") #define mem(a , b) memset(a, b ,sizeof(a)) #define front_zero(n) __builtin_clz(n) #define back_zero(n) __builtin_ctzll(n) #define total_one(n) __builtin_popcount(n) #define clean fflush(stdout) const ll mod = (ll) 998244353; // const ll mod = (ll) 1e9 + 7; //const ll INF = numeric_limits<ll>::max()-1; const ll INF = (ll)2e18; // ll dx[]={0,1,0,-1}; // ll dy[]={1,0,-1,0}; // ll dxx[]={0,1,0,-1,1,1,-1,-1}; // ll dyy[]={1,0,-1,0,1,-1,1,-1}; mt19937 rng(chrono::system_clock::now().time_since_epoch().count()); #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; const ll N = 1e6 + 5; const ll mx_TL = 2e8; ll a[N], dp[N], k[N], pick[N], last[N]; void solve(){ ll n; cin >> n; ll mx = 0; for(ll i = 1; i <= n; i++){ cin >> a[i]; mx = max(mx, a[i]); } for(ll i = 1; i <= n; i++){ cin >> k[i]; } if(mx < (1 << 8)){ mem(dp, 0); for(ll i = 1; i <= n; i++){ ll ans = 1; last[i] = i; for(ll v = 0; v < (1 << 8); v++){ if(__builtin_popcount(a[i] & v) == k[i]){ if(dp[v] + 1 > ans){ ans = dp[v] + 1; last[i] = pick[v]; } } } if(ans > dp[a[i]]){ pick[a[i]] = i; dp[a[i]] = ans; } } ll ans = 1, cur = 1; for(ll i = 0; i < (1 << 8); i++) ans = max(ans, dp[i]); for(ll i = 0; i < (1 << 8); i++){ if(dp[i] == ans) cur = pick[i]; } vector < ll > res; while(true){ res.pb(cur); if(last[cur] == cur) break; cur = last[cur]; } reverse(res.begin(), res.end()); cout << ans << '\n'; for(auto u : res){ cout << u << ' '; } cout << '\n'; return; } ll force = min(n, mx_TL / n); for(ll i = 1; i <= n; i++){ last[i] = i; dp[i] = 1; for(ll j = max(1, i - force); j < i; j++){ if(__builtin_popcount(a[i] & a[j]) == k[i]){ if(dp[j] + 1 > dp[i]){ dp[i] = dp[j] + 1; last[i] = j; } } } } ll ans = 1, cur = 1; for(ll i = 0; i < (1 << 8); i++) ans = max(ans, dp[i]); for(ll i = 1; i <= n; i++){ if(dp[i] == ans) cur = i; } vector < ll > res; while(true){ res.pb(cur); if(last[cur] == cur) break; cur = last[cur]; } reverse(res.begin(), res.end()); cout << ans << '\n'; for(auto u : res){ cout << u << ' '; } cout << '\n'; return; } int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); auto start_time = clock(); #else // freopen("subsequence.in", "r", stdin); // freopen("subsequence.out", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); #endif //precalc(); ll T = 1, CT = 0;// cin >> T; while(T--){ // cout << "Case #" << ++CT << ": "; solve(); } #ifdef LOCAL auto end_time = clock(); cerr<< "Execution time: "<<(end_time - start_time)*(int)1e3/CLOCKS_PER_SEC<<" ms\n"; #endif return 0; }

Compilation message (stderr)

subsequence.cpp: In function 'int main()':
subsequence.cpp:150:15: warning: unused variable 'CT' [-Wunused-variable]
  150 |     ll T = 1, CT = 0;// cin >> T;
      |               ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...