제출 #1265507

#제출 시각아이디문제언어결과실행 시간메모리
1265507canhnam357Bali Sculptures (APIO15_sculpture)C++20
100 / 100
60 ms332 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, l, r; cin >> n >> l >> r; vector<int> a(n); for (int &i : a) cin >> i; if (n <= 100) { vector<vector<int>> dp(n, vector<int>(r + 1)); long long ans = 0; for (int mask = 40; mask >= 0; mask--) { for (int i = 0; i < n; i++) { for (int j = 0; j <= r; j++) dp[i][j] = 0; } for (int i = 0; i < n; i++) { long long sum = 0; for (int j = i; j >= 0; j--) { sum += a[j]; if (((sum | ans) ^ ans) < (1LL << mask)) { if (j == 0) { dp[i][1] = 1; } else { for (int k = 2; k <= r; k++) { dp[i][k] |= dp[j - 1][k - 1]; } } } } } long long add = (1LL << mask); for (int i = l; i <= r; i++) { if (dp[n - 1][i]) { add = 0; break; } } ans += add; } cout << ans; } else { vector<int> dp(n); long long ans = 0; for (int mask = 40; mask >= 0; mask--) { for (int i = 0; i < n; i++) { dp[i] = n + 1; } for (int i = 0; i < n; i++) { long long sum = 0; for (int j = i; j >= 0; j--) { sum += a[j]; if (((sum | ans) ^ ans) < (1LL << mask)) { if (j == 0) { dp[i] = 1; } else { dp[i] = min(dp[i], dp[j - 1] + 1); } } } } long long add = (1LL << mask); if (dp[n - 1] <= r) add = 0; ans += add; } cout << ans; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...