Submission #1218856

#TimeUsernameProblemLanguageResultExecution timeMemory
1218856kunzaZa183Bali Sculptures (APIO15_sculpture)C++20
71 / 100
1097 ms18432 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
  cin.tie(0)->sync_with_stdio(0);

  int n, a, b;
  cin >> n >> a >> b;

  vector<int> vi(n);
  for (auto &a : vi)
    cin >> a;

  vector<vector<ll>> vvi(n, vector<ll>(n));
  vector<array<ll, 3>> elist;
  for (int i = 0; i < n; i++) {
    vvi[i][i] = vi[i];
    elist.push_back({i, i + 1, vvi[i][i]});
    for (int j = i + 1; j < n; j++) {
      vvi[i][j] = vvi[i][j - 1] + vi[j];
      elist.push_back({i, j + 1, vvi[i][j]});
    }
  }

  ll ans = 0;
  const int logn = 50;

  for (int i = logn; i >= 0; i--) {
    vector<array<ll, 3>> cure;

    vector<vector<pair<int, ll>>> adj(n);
    vector<set<int>> dp(n + 1);

    for (auto a : elist)
      if ((a[2] & (1ll << i)) == 0)
        adj[a[0]].push_back({a[1], a[2]});

    dp[0].insert(0);
    for (int i = 0; i < n; i++)
      for (auto a : adj[i])
        for (auto b : dp[i])
          dp[a.first].insert(b + 1);

    auto it = dp.back().lower_bound(a);
    if (it == dp.back().end() || *it > b)
      ans += (1ll << i);
    else {
      elist.clear();
      for (int i = 0; i < n; i++)
        for (auto a : adj[i])
          elist.push_back({i, a.first, a.second});
    }
  }

  cout << ans << '\n';
}
#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...