제출 #303658

#제출 시각아이디문제언어결과실행 시간메모리
303658vipghn2003Bali Sculptures (APIO15_sculpture)C++14
100 / 100
320 ms11344 KiB
#include<bits/stdc++.h>

using namespace std;

const int N=2005;
int n,l,r,a[N],dp[N][2];
long long offbit;
vector<int>go[N];

bool Try(int k)
{
    offbit+=(1ll<<k);
    for(int i=1;i<=n;i++) go[i].clear();
    for(int i=1;i<=n;i++)
    {
        long long cur=0;
        for(int j=i;j<=n;j++)
        {
            cur+=a[j];
            if((cur&offbit)==0) go[j].push_back(i);
        }
    }
    offbit-=(1ll<<k);
    dp[0][0]=0;
    dp[0][1]=0;
    for(int i=1;i<=n;i++)
    {
        dp[i][0]=1e9;
        dp[i][1]=0;
        for(auto&to:go[i])
        {
            dp[i][0]=min(dp[i][0],dp[to-1][0]+1);
            dp[i][1]=max(dp[i][1],dp[to-1][1]+1);
        }
    }
    return (dp[n][0]<=r&&dp[n][1]>=l);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>n>>l>>r;
    for(int i=1;i<=n;i++) cin>>a[i];
    long long res=0;
    for(int i=50;i>=0;i--)
    {
        if(Try(i)) offbit+=(1ll<<i);
        else res+=(1ll<<i);
    }
    cout<<res;
}
#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...