제출 #824086

#제출 시각아이디문제언어결과실행 시간메모리
824086phiLongest beautiful sequence (IZhO17_subsequence)C++17
0 / 100
76 ms172656 KiB
#include <iostream> #include <vector> #include <array> using namespace std; int main() { int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) cin >> a[i]; vector<int> k(n); for (int i = 0; i < n; i++) cin >> k[i]; constexpr int mk = 20; constexpr int b = mk / 2; constexpr int mask = (1 << b) - 1; array<array<array<int, mk + 1>, 1 << b>, 1 << b> dp = {}; array<array<array<int, mk + 1>, 1 << b>, 1 << b> current = {}; vector<int> prev(n); int ans = -1; int end; for (int i = 0; i < n; i++) { int lbs = 1; int p = -1; for (int j = 0; j < (1 << b); j++) { if (k[i] < __builtin_popcount(j & a[i])) continue; int c = dp[j][a[i] >> b][k[i] - __builtin_popcount(j & a[i])]; if (lbs < c + 1) { lbs = c + 1; p = current[j][a[i] >> b][k[i] - __builtin_popcount(j & a[i])]; } } for (int j = 0; j < (1 << b); j++) { int c = __builtin_popcount(j & (a[i] > b)); if (dp[a[i] & mask][j][c] < lbs) { dp[a[i] & mask][j][c] = lbs; current[a[i] & mask][j][c] = i; } } prev[i] = p; if (lbs > ans) { ans = lbs; end = i; } } vector<int> arr; while (end != -1) { arr.push_back(end + 1); end = prev[end]; } cout << arr.size() << "\n"; for (int i = arr.size() - 1; i >= 0; i--) cout << arr[i] << " \n"[i == 0]; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

subsequence.cpp: In function 'int main()':
subsequence.cpp:59:27: warning: 'end' may be used uninitialized in this function [-Wmaybe-uninitialized]
   59 |         arr.push_back(end + 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...