제출 #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...