#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n, a, b; cin >> n >> a >> b;
vector<int> x(n+1);
for(int i = 1; i <= n; i++){
cin >> x[i];
}
if(n <= 100){
int cur = (1LL<<44)-1;
for(int i = 43; i >= 0; i--){
cur -= (1LL<<i);
vector<vector<int>> dp(n+1, vector<int>(n+1));
dp[0][0] = 1;
vector<pair<int, int>> q;
for(int i = 1; i <= n; i++){
int sum = 0;
for(int y = i; y <= n; y++){
sum += x[y];
if((sum|cur) == cur){
for(int z = 1; z <= n; z++){
dp[y][z] |= dp[i-1][z-1];
}
}
}
}
bool j = false;
for(int y = a; y <= b; y++){
if(dp[n][y]){
j = true;
}
}
if(!j){
cur += (1LL<<i);
}
}
cout << cur << "\n";
}else{
int cur = (1LL<<44)-1;
for(int i = 43; i >= 0; i--){
cur -= (1LL<<i);
vector<int> dp(n+1, 1e18);
dp[0] = 0;
vector<pair<int, int>> q;
for(int i = 1; i <= n; i++){
int sum = 0;
for(int y = i; y <= n; y++){
sum += x[y];
if((sum|cur) == cur){
dp[y] = min(dp[y], dp[i-1]+1);
}
}
}
if(dp[n] > b){
cur += (1LL<<i);
}
}
cout << cur << "\n";
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |