Submission #692263

#TimeUsernameProblemLanguageResultExecution timeMemory
692263Nhoksocqt1Longest beautiful sequence (IZhO17_subsequence)C++17
100 / 100
2043 ms51944 KiB
#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f #pragma GCC target ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") #define fi first #define se second typedef long long ll; typedef pair<int, int> ii; template<class X, class Y> inline bool maximize(X &x, const Y &y) {return (x < y ? x = y, 1 : 0);} template<class X, class Y> inline bool minimize(X &x, const Y &y) {return (x > y ? x = y, 1 : 0);} mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int Random(int l, int r) { return uniform_int_distribution<int>(l, r)(rng); } const int MAXN = 100005; const int MAXV = 1 << 20; int dp[MAXN], f[1 << 10][1 << 10][11], cntBit[MAXV]; int val[MAXN], eq[MAXN], nArr; int magicFunc(void) { for (int mask = 0; mask < (1 << 20); ++mask) cntBit[mask] = __builtin_popcount(mask); for (int mask = 0; mask < (1 << 10); ++mask) f[mask][0][0] = 0; int res(0); for (int i = 1; i <= nArr; ++i) { dp[i] = 1; int pre = val[i] >> 10, suf = val[i] & ((1 << 10) - 1); for (int j = 0; j < (1 << 10); ++j) { int b = cntBit[j & pre]; if(b > eq[i] || eq[i] - b > 10) continue; dp[i] = max(dp[i], 1 + f[j][suf][eq[i] - b]); } for (int j = 0; j < (1 << 10); ++j) { int b = cntBit[j & suf]; f[pre][j][b] = max(f[pre][j][b], dp[i]); } res = max(res, dp[i]); } return res; } void traceAnswer(void) { int pos(0); for (int i = 1; i <= nArr; ++i) { if(dp[pos] < dp[i]) pos = i; } stack<int> st; st.push(pos); for (int i = pos - 1; i > 0; --i) { if(dp[i] == dp[pos] - 1 && __builtin_popcount(val[i] & val[pos]) == eq[pos]) { pos = i; st.push(pos); } } while(st.size()) { cout << st.top() << ' '; st.pop(); } cout << '\n'; } void process() { cin >> nArr; for (int i = 1; i <= nArr; ++i) { cin >> val[i]; } for (int i = 1; i <= nArr; ++i) { cin >> eq[i]; } cout << magicFunc() << '\n'; traceAnswer(); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("ATHM.inp", "r", stdin); // freopen("ATHM.out", "w", stdout); process(); return 0; }

Compilation message (stderr)

subsequence.cpp:6: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    6 | #pragma GCC optimization ("O3")
      | 
subsequence.cpp:7: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    7 | #pragma GCC optimization ("unroll-loops")
      |
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...