社区讨论

88 pts 求调

P15342「RedStone OI R1 B」浮木保卫战参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mlokauhk
此快照首次捕获于
2026/02/16 10:35
3 周前
此快照最后确认于
2026/02/20 17:55
3 周前
查看原帖
CPP
#include <bits/stdc++.h>
#define File(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
#define rep(i, l, r) for (int i = (l), i##END = (r); i <= i##END; i ++)
#define dwn(i, r, l) for (int i = (r), i##END = (l); i >= i##END; i --)
using namespace std;

typedef long long i64;
template<typename T>
inline void Max(T &x, const T &k){ x = (x > k ? x : k); }
template<typename T>
inline void Min(T &x, const T &k){ x = (x < k ? x : k); }

namespace Sol{
  const int N = 5e3 + 5;
  int n, m, k, l1[N], r1[N], l2[N], r2[N];
  int a[N], b[N], lg2[N];
  int f[N][N], g[N][N];
  int st1[N][14], st2[N][14], ans = 0;
  void main(){
    cin >> n >> m >> k;
    lg2[0] = -1; rep(i, 1, 5000) lg2[i] = lg2[i >> 1] + 1;
    rep(i, 1, n) cin >> a[i];
    rep(i, 1, n) cin >> l1[i] >> r1[i];
    rep(i, 1, m) cin >> b[i];
    rep(i, 1, m) cin >> l2[i] >> r2[i];
    auto q1 = [](int l, int r) -> int{
      int k = lg2[r - l + 1];
      return max(st1[l][k], st1[r - (1 << k) + 1][k]);
    }; auto q2 = [](int l, int r) -> int{
      int k = lg2[r - l + 1];
      return max(st2[l][k], st2[r - (1 << k) + 1][k]);
    };
    rep(i, 1, k){
      rep(j, 1, m) st1[j][0] = (b[j] > i ? 0 : g[i - b[j]][j]);
      rep(p, 1, 13) rep(j, 1, m - (1 << p - 1))
        st1[j][p] = max(st1[j][p - 1], st1[j + (1 << p - 1)][p - 1]);
      rep(j, 1, n) f[i][j] = q1(l1[j], r1[j]);
      rep(j, 1, n) st2[j][0] = a[j] + f[i][j];
      rep(p, 1, 13) rep(j, 1, m - (1 << p - 1))
        st2[j][p] = max(st2[j][p - 1], st2[j + (1 << p - 1)][p - 1]);
      rep(j, 1, m) g[i][j] = q2(l2[j], r2[j]);
    }
    rep(i, 1, n) rep(j, 0, k) Max(ans, f[j][i] + a[i]);
    cout << ans;
  }
}

int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int T = 1; while (T --) Sol :: main(); return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...