号召学习 object oriented progs
查看原帖
号召学习 object oriented progs
344409
_stardust_楼主2022/3/9 21:07

然后你就可以写出一坨屎,,,

仅供观赏 ,不具实际意义 ,举报随意

我先去大脑升级

创死你,,,

#include <bits/stdc++.h>
using namespace std;
#define cmin(x, ...) x = min({x, __VA_ARGS__})
#define cmax(x, ...) x = max({x, __VA_ARGS__})
#define fors(i, l, r, ...) \
  for (int i = (l), i##end = (r), ##__VA_ARGS__; i <= i##end; ++i)
#define dfors(i, r, l, ...) \
  for (int i = (r), i##end = (l), ##__VA_ARGS__; i >= i##end; --i)
int n, m, q;
template <class T>
struct segtree {
  struct node {
    int v = 0, tag = 0;
    bool operator<(const node& o) const { return v < o.v; }
  };
  vector<node> a;
  const int _n;
  segtree(int n) : _n(n), a(4 << __lg(n)) {}
  segtree(int n, const T& x) : _n(n), a(4 << __lg(n)) {
    for (auto& c : a) c = x;
  }
  template <class L>
  void apply(int p, int q, const T& v, L op) {
    apply(p, q, v, 1, 1, n, op);
  }
  template <class L>
  void apply(int p, int q, const T& v, int x, int l, int r, L op) {
    if (l > q || r < p) return;
    op_s(a[x].v, v);
    if (l >= p && r <= q) return op_f(a[x].tag, v);
    int mid = (l + r) / 2;
    apply(p, q, v, x * 2, l, mid), apply(p, q, v, x * 2 + 1, mid + 1, r);
  }
  template <class L>
  node ask(int p, int q, L call) {
    return ask(p, q, 1, 1, n, call);
  }
  node ask(int p, int q, int x, int l, int r) {
    if (l > q || r < p) return 0;
    if (l >= p && r <= q) return call(a[x]);
    int mid = (l + r) / 2;
    return max(ask(p, q, x * 2, l, mid), ask(p, q, x * 2 + 1, mid + 1, r));
  }
};
signed main() {
  ios::sync_with_stdio(0), cin.tie(0);
  cin >> n >> m >> q;
  segtree<segtree<int>> seg(n, segtree<int>(m));
  for (int d, s, w, x, y; q--;) {
    cin >> d >> s >> w >> x >> y, x++, y++;
    seg.apply(x, x + d - 1,
              seg.ask(x, x + d - 1,
                      [&](segtree<int>& t) {
                        return t.ask(y, y + s - 1, [&](segtree<int>::node& x) {
                          return x.v;
                        });
                      }),
              [&](segtree<int>& t, const segtree<int>::node& v) {
                t.apply(y, y + s - 1, {v, 0},
                        [&](int& v, segtree<int>::node& _v) { cmax(v, _v.v); });
              })
  }
  cout << seg.ask(1, n,
                  [&](const segtree<int>& t) {
                    return t.ask(1, m, const segtree<int>::node& x) {
                      return x.v;
                    }
                  })
              .v
       << "\n";
  return 0;
}
2022/3/9 21:07
加载中...