제출 #556104

#제출 시각아이디문제언어결과실행 시간메모리
556104SweezyBali Sculptures (APIO15_sculpture)C++17
100 / 100
217 ms444 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int inf = 1e18; void solve() { int n, l, r; cin >> n >> l >> r; vector<int> a(n); for (auto &x : a) { cin >> x; } int answer = (1ll << 60) - 1; if (n > 100) { for (int bit = 59; bit >= 0; bit--) { answer -= 1ll << bit; vector<int> dp(n, inf); for (int i = 0; i < n; i++) { int sum = 0; for (int j = i; j >= 0; j--) { sum += a[j]; if ((sum | answer) == answer) { if (j == 0) { dp[i] = 1; } else { dp[i] = min(dp[j - 1] + 1, dp[i]); } } } } if (dp[n - 1] > r) { answer += 1ll << bit; } } } else { for (int bit = 59; bit >= 0; bit--) { answer -= 1ll << bit; vector<vector<char>> dp(n, vector<char> (n + 1)); for (int i = 0; i < n; i++) { int sum = 0; for (int j = i; j >= 0; j--) { sum += a[j]; if ((sum | answer) == answer) { if (j == 0) { dp[i][1] = 1; } else { for (int cnt = 2; cnt <= n; cnt++) { dp[i][cnt] |= dp[j - 1][cnt - 1]; } } } } } char good = 0; for (int cnt = l; cnt <= r; cnt++) { good |= dp[n - 1][cnt]; } if (!good) { answer += 1ll << bit; } } } cout << answer; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); 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...