제출 #1208966

#제출 시각아이디문제언어결과실행 시간메모리
1208966i_love_springBitwise (BOI06_bitwise)C++20
100 / 100
1 ms328 KiB
  #include <bits/stdc++.h>
  using namespace std;
  #define ll long long
  #define ar array
  void solve() {
    int n,p;
    cin >> n >> p;
    vector<int> a(n),b(n),k(p + 1,0),check(p,0);
    for (int i = 1; i <= p;i++) {
      cin >> k[i];
      k[i] +=k[i - 1];
    }

    for (int i = 0; i  < n;i++) cin >> a[i] >> b[i];
    ll ans = 0;
    for (int i = 30; i >= 0;i--) {
      bool ok = 1;
      int set = 1 << i;
      for (int j = 0; j < p;j++) {
        if (check[j]) continue;
        bool kk = 0;
        for (int v = k[j]; v < k[j + 1];v++) {
          kk |= (b[v] >= set);
        }
        ok &= kk;
      }
      for (int j = 0; j < p;j++) {
        int q = 0, q1 = 0;
        for (int v = k[j];v < k[j + 1];v++) {
          q += (b[v] >= set);
          q1 += (b[v] >= set && a[v] < set);
        }
        for (int v = k[j];v < k[j + 1];v++) {
          if (q1 > 0 && (!ok || q > 1)) check[j] = 1;
          if (b[v] < set) continue;
          a[v] -= set;
          b[v] -= set;
        }
      }
      
      if (ok) ans += set; 
    }
    cout << ans;
  }
  signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int t = 1;
  // cin >> t;
    while (t--) {
      solve();
      cout << "\n";
    }
    return 0;
  } 
#Verdict Execution timeMemoryGrader output
Fetching results...