#include<bits/stdc++.h>
#define MAXN 2007
using namespace std;
int n,L,R;
int a[MAXN];
long long pref[MAXN];
long long ans;
int dp[MAXN];
bool dp2[107][107];
bool ok(long long x,int bit){
for(int i=60;i>=bit;i--){
if(((1LL<<i)&x)>0 and ((1LL<<i)&ans)==0)return false;
}
return true;
}
void calcdp(int bit){
for(int i=1;i<=n;i++){
dp[i]=2*n;
for(int f=i;f>=1;f--){
if(ok(pref[i]-pref[f-1],bit))dp[i]=min(dp[i],dp[f-1]+1);
}
}
}
void calcdp2(int bit){
dp2[0][0]=true;
for(int i=1;i<=R;i++)dp2[0][i]=false;
for(int i=1;i<=n;i++){
for(int k=1;k<=R;k++){
dp2[i][k]=false;
for(int f=i;f>=1;f--){
if(ok(pref[i]-pref[f-1],bit) and dp2[f-1][k-1])dp2[i][k]=true;
}
}
}
}
void solve1(){
for(int i=60;i>=0;i--){
calcdp(i);
if(dp[n]>R)ans|=(1LL<<i);
}
cout<<ans<<"\n";
}
void solve2(){
for(int i=60;i>=0;i--){
calcdp2(i);
for(int f=L;f<=R;f++){
if(dp2[n][f])break;
else if(f==R)ans|=(1LL<<i);
}
}
cout<<ans<<"\n";
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>L>>R;
for(int i=1;i<=n;i++){
cin>>a[i];
pref[i]=pref[i-1]+a[i];
}
if(L==1){
solve1();
}else{
solve2();
}
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... |