(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 #91036

#TimeUsernameProblemLanguageResultExecution timeMemory
91036popovicirobertLongest beautiful sequence (IZhO17_subsequence)C++14
100 / 100
5190 ms155520 KiB
#include <bits/stdc++.h> #define lsb(x) (x & (-x)) #define ll long long #define ull unsigned long long #define ld long double // 217 // 44 using namespace std; const int MAXN = (int) 1e5; int aux[1 << 10][1 << 10][11], ind[1 << 10][1 << 10][11]; int arr[MAXN + 1], k[MAXN + 1]; int dp[MAXN + 1], to[MAXN + 1]; inline int get_last(int x) { return x & ((1 << 10) - 1); } inline int get_first(int x) { return x >> 10; } int cnt[1 << 10]; inline void update(int pos, int x) { int a = get_first(x), b = get_last(x); for(int i = 0; i < (1 << 10); i++) { int nr = cnt[b & i]; if(aux[a][i][nr] < dp[pos]) { aux[a][i][nr] = dp[pos]; ind[a][i][nr] = pos; } } } inline void query(int pos, int x) { int a = get_first(x), b = get_last(x); for(int i = 0; i < (1 << 10); i++) { int nr = cnt[a & i]; if(k[pos] >= nr && k[pos] - nr <= 10 && dp[pos] < aux[i][b][k[pos] - nr] + 1) { dp[pos] = aux[i][b][k[pos] - nr] + 1; to[pos] = ind[i][b][k[pos] - nr]; } } } int main() { //ifstream cin("A.in"); //ofstream cout("A.out"); int i, j, n; ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> n; for(i = 1; i <= n; i++) { cin >> arr[i]; } for(i = 1; i <= n; i++) { cin >> k[i]; } for(i = 0; i < (1 << 10); i++) { cnt[i] = __builtin_popcount(i); } for(i = 1; i <= n; i++) { query(i, arr[i]); dp[i] = max(dp[i], 1); update(i, arr[i]); } int ans = 0, pos; for(i = 1; i <= n; i++) { if(dp[i] > ans) { ans = dp[i]; pos = i; } } vector <int> sol; while(pos > 0) { sol.push_back(pos); pos = to[pos]; } reverse(sol.begin(), sol.end()); cout << ans << "\n"; for(auto it : sol) { cout << it << " "; } //cin.close(); //cout.close(); return 0; }

Compilation message (stderr)

subsequence.cpp: In function 'int main()':
subsequence.cpp:53:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j, n;
            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...