Submission #200177

# Submission time Handle Problem Language Result Execution time Memory
200177 2020-02-05T15:38:21 Z EntityIT Two Dishes (JOI19_dishes) C++14
100 / 100
6084 ms 198412 KB
#include<bits/stdc++.h>

using namespace std;

#define all(x) (x).begin(), (x).end()
#define sz(x) ( (int)(x).size() )
using LL = long long;

template<class T>
inline bool asMn(T &a, const T &b) { return a > b ? a = b, true : false; }
template<class T>
inline bool asMx(T &a, const T &b) { return a < b ? a = b, true : false; }

mt19937 rng( (uint32_t)chrono::steady_clock::now().time_since_epoch().count() );

int n, m;
vector<int> p, q;
vector<LL> s, t, pSA, pSB;

struct It {
  vector<LL> sum;
  vector<bool> lz;
  It(int nNode) { sum.assign(nNode, 0); lz.assign(nNode, false); }

  void trueVal(int i, int Left, int Right) {
    if (!lz[i]) return ;
    sum[i] = 0;
    if (Left != Right) lz[i << 1] = lz[i << 1 | 1] = lz[i];
    lz[i] = false;
  }

  void upd(int l, int r, int i = 1, int Left = 0, int Right = m) {
    trueVal(i, Left, Right);
    if (r < Left || Right < l) return ;
    if (l <= Left && Right <= r) {
      lz[i] = true; trueVal(i, Left, Right);
      return ;
    }
    int Mid = (Left + Right) >> 1;
    upd(l, r, i << 1, Left, Mid);
    upd(l, r, i << 1 | 1, Mid + 1, Right);
    sum[i] = sum[i << 1] + sum[i << 1 | 1];
  }
  void add(int pos, LL val, int i = 1, int Left = 0, int Right = m) {
    trueVal(i, Left, Right);
    if (pos < Left || Right < pos) return ;
    if (Left == Right) {
      sum[i] += val;
      return ;
    }
    int Mid = (Left + Right) >> 1;
    add(pos, val, i << 1, Left, Mid);
    add(pos, val, i << 1 | 1, Mid + 1, Right);

    sum[i] = sum[i << 1] + sum[i << 1 | 1];
  }

  int findPos(int l, LL &cur, int i = 1, int Left = 0, int Right = m) {
    trueVal(i, Left, Right);
    if (Right < l) return m + 1;
    if (l <= Left && sum[i] < cur) {
      cur -= sum[i];
      return m + 1;
    }

    if (Left == Right) return Left;

    int Mid = (Left + Right) >> 1;
    int tmp = findPos(l, cur, i << 1, Left, Mid);
    if (tmp != m + 1) return tmp;
    else return findPos(l, cur, i << 1 | 1, Mid + 1, Right);
  }
  LL get(int l, int r, int i = 1, int Left = 0, int Right = m) {
    trueVal(i, Left, Right);
    if (l <= Left && Right <= r) return sum[i];
    int Mid = (Left + Right) >> 1;
    if (Mid < l) return get(l, r, i << 1 | 1, Mid + 1, Right);
    else if (r <= Mid) return get(l, r, i << 1, Left, Mid);
    else return get(l, r, i << 1, Left, Mid) + get(l, r, i << 1 | 1, Mid + 1, Right);
  }
};

int main() {
  ios_base::sync_with_stdio(0); cin.tie(0);

  #ifdef FourLeafClover
  freopen("input", "r", stdin);
  #endif // FourLeafCLover

  cin >> n >> m;
  pSA.assign(n + 1, 0);
  pSB.assign(m + 1, 0);
  s.assign(n + 1, 0);
  t.assign(m + 1, 0);
  p.assign(n + 1, 0);
  q.assign(m + 1, 0);

  for (int i = 1; i <= n; ++i) {
    cin >> pSA[i] >> s[i] >> p[i];
    pSA[i] += pSA[i - 1];
  }

  for (int i = 1; i <= m; ++i) {
    cin >> pSB[i] >> t[i] >> q[i];
    pSB[i] += pSB[i - 1];
  }

  vector<int> mxI(m + 1);
  vector<vector<int> > changeMxI(n + 1);
  for (int j = 0; j <= m; ++j) {
    mxI[j] = (int)(upper_bound(all(pSA), t[j] - pSB[j]) - pSA.begin() ) - 1;
    if (mxI[j] + 1 <= n) changeMxI[ mxI[j] + 1 ].emplace_back(j);
  }

  It it( (m + 5) << 2);

  auto upd = [&](int pos) {
    LL tmp = it.get(pos, pos);

    if (tmp >= 0) return ;

    tmp = -tmp;
    int r = it.findPos(pos + 1, tmp);
    it.add(r, it.get(pos, r - 1) );
    it.upd(pos, r - 1);
  };

  for (int i = 1; i <= n; ++i) {
    int mxJ = (int)(upper_bound(all(pSB), s[i] - pSA[i]) - pSB.begin() ) - 1;

    vector<int> tmp;
    if (mxJ >= 0) {
      it.add(0, p[i]); tmp.emplace_back(0);
      if (mxJ < m) {
        it.add(mxJ + 1, -p[i]);
        tmp.emplace_back(mxJ + 1);
      }
    }

    for (auto j : changeMxI[i]) {
      it.add(j, q[j]);
      tmp.emplace_back(j);
    }

    sort(all(tmp) ); reverse(all(tmp) );
    for (int j : tmp) if (j) upd(j);
  }

  LL ans = it.get(0, m);
  for (int j = 0; j <= m; ++j) ans += mxI[j] < n ? 0 : q[j];

  cout << ans << '\n';

  return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 419 ms 24056 KB Output is correct
2 Correct 496 ms 23776 KB Output is correct
3 Correct 256 ms 20412 KB Output is correct
4 Correct 342 ms 24024 KB Output is correct
5 Correct 5 ms 376 KB Output is correct
6 Correct 423 ms 22520 KB Output is correct
7 Correct 101 ms 11768 KB Output is correct
8 Correct 123 ms 9212 KB Output is correct
9 Correct 282 ms 20344 KB Output is correct
10 Correct 426 ms 26616 KB Output is correct
11 Correct 197 ms 20728 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 376 KB Output is correct
2 Correct 5 ms 376 KB Output is correct
3 Correct 5 ms 376 KB Output is correct
4 Correct 5 ms 376 KB Output is correct
5 Correct 5 ms 376 KB Output is correct
6 Correct 5 ms 376 KB Output is correct
7 Correct 6 ms 376 KB Output is correct
8 Correct 5 ms 376 KB Output is correct
9 Correct 5 ms 376 KB Output is correct
10 Correct 5 ms 376 KB Output is correct
11 Correct 5 ms 376 KB Output is correct
12 Correct 5 ms 376 KB Output is correct
13 Correct 5 ms 376 KB Output is correct
14 Correct 5 ms 380 KB Output is correct
15 Correct 5 ms 376 KB Output is correct
16 Correct 5 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 376 KB Output is correct
2 Correct 5 ms 376 KB Output is correct
3 Correct 5 ms 376 KB Output is correct
4 Correct 5 ms 376 KB Output is correct
5 Correct 5 ms 376 KB Output is correct
6 Correct 5 ms 376 KB Output is correct
7 Correct 6 ms 376 KB Output is correct
8 Correct 5 ms 376 KB Output is correct
9 Correct 5 ms 376 KB Output is correct
10 Correct 5 ms 376 KB Output is correct
11 Correct 5 ms 376 KB Output is correct
12 Correct 5 ms 376 KB Output is correct
13 Correct 5 ms 376 KB Output is correct
14 Correct 5 ms 380 KB Output is correct
15 Correct 5 ms 376 KB Output is correct
16 Correct 5 ms 376 KB Output is correct
17 Correct 8 ms 632 KB Output is correct
18 Correct 7 ms 632 KB Output is correct
19 Correct 10 ms 632 KB Output is correct
20 Correct 8 ms 632 KB Output is correct
21 Correct 11 ms 632 KB Output is correct
22 Correct 10 ms 632 KB Output is correct
23 Correct 10 ms 652 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 376 KB Output is correct
2 Correct 5 ms 376 KB Output is correct
3 Correct 5 ms 376 KB Output is correct
4 Correct 5 ms 376 KB Output is correct
5 Correct 5 ms 376 KB Output is correct
6 Correct 5 ms 376 KB Output is correct
7 Correct 6 ms 376 KB Output is correct
8 Correct 5 ms 376 KB Output is correct
9 Correct 5 ms 376 KB Output is correct
10 Correct 5 ms 376 KB Output is correct
11 Correct 5 ms 376 KB Output is correct
12 Correct 5 ms 376 KB Output is correct
13 Correct 5 ms 376 KB Output is correct
14 Correct 5 ms 380 KB Output is correct
15 Correct 5 ms 376 KB Output is correct
16 Correct 5 ms 376 KB Output is correct
17 Correct 8 ms 632 KB Output is correct
18 Correct 7 ms 632 KB Output is correct
19 Correct 10 ms 632 KB Output is correct
20 Correct 8 ms 632 KB Output is correct
21 Correct 11 ms 632 KB Output is correct
22 Correct 10 ms 632 KB Output is correct
23 Correct 10 ms 652 KB Output is correct
24 Correct 400 ms 23284 KB Output is correct
25 Correct 246 ms 25456 KB Output is correct
26 Correct 415 ms 23472 KB Output is correct
27 Correct 288 ms 29432 KB Output is correct
28 Correct 442 ms 24608 KB Output is correct
29 Correct 239 ms 23160 KB Output is correct
30 Correct 963 ms 26956 KB Output is correct
31 Correct 120 ms 15732 KB Output is correct
32 Correct 109 ms 12024 KB Output is correct
33 Correct 543 ms 25840 KB Output is correct
34 Correct 643 ms 25080 KB Output is correct
35 Correct 793 ms 27172 KB Output is correct
36 Correct 867 ms 26992 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 376 KB Output is correct
2 Correct 5 ms 376 KB Output is correct
3 Correct 5 ms 376 KB Output is correct
4 Correct 5 ms 376 KB Output is correct
5 Correct 5 ms 376 KB Output is correct
6 Correct 5 ms 376 KB Output is correct
7 Correct 6 ms 376 KB Output is correct
8 Correct 5 ms 376 KB Output is correct
9 Correct 5 ms 376 KB Output is correct
10 Correct 5 ms 376 KB Output is correct
11 Correct 5 ms 376 KB Output is correct
12 Correct 5 ms 376 KB Output is correct
13 Correct 5 ms 376 KB Output is correct
14 Correct 5 ms 380 KB Output is correct
15 Correct 5 ms 376 KB Output is correct
16 Correct 5 ms 376 KB Output is correct
17 Correct 8 ms 632 KB Output is correct
18 Correct 7 ms 632 KB Output is correct
19 Correct 10 ms 632 KB Output is correct
20 Correct 8 ms 632 KB Output is correct
21 Correct 11 ms 632 KB Output is correct
22 Correct 10 ms 632 KB Output is correct
23 Correct 10 ms 652 KB Output is correct
24 Correct 400 ms 23284 KB Output is correct
25 Correct 246 ms 25456 KB Output is correct
26 Correct 415 ms 23472 KB Output is correct
27 Correct 288 ms 29432 KB Output is correct
28 Correct 442 ms 24608 KB Output is correct
29 Correct 239 ms 23160 KB Output is correct
30 Correct 963 ms 26956 KB Output is correct
31 Correct 120 ms 15732 KB Output is correct
32 Correct 109 ms 12024 KB Output is correct
33 Correct 543 ms 25840 KB Output is correct
34 Correct 643 ms 25080 KB Output is correct
35 Correct 793 ms 27172 KB Output is correct
36 Correct 867 ms 26992 KB Output is correct
37 Correct 440 ms 23792 KB Output is correct
38 Correct 317 ms 29304 KB Output is correct
39 Correct 376 ms 29448 KB Output is correct
40 Correct 597 ms 29560 KB Output is correct
41 Correct 5 ms 376 KB Output is correct
42 Correct 897 ms 27104 KB Output is correct
43 Correct 546 ms 25584 KB Output is correct
44 Correct 664 ms 25080 KB Output is correct
45 Correct 855 ms 27188 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 376 KB Output is correct
2 Correct 5 ms 376 KB Output is correct
3 Correct 5 ms 376 KB Output is correct
4 Correct 5 ms 376 KB Output is correct
5 Correct 5 ms 376 KB Output is correct
6 Correct 5 ms 376 KB Output is correct
7 Correct 6 ms 376 KB Output is correct
8 Correct 5 ms 376 KB Output is correct
9 Correct 5 ms 376 KB Output is correct
10 Correct 5 ms 376 KB Output is correct
11 Correct 5 ms 376 KB Output is correct
12 Correct 5 ms 376 KB Output is correct
13 Correct 5 ms 376 KB Output is correct
14 Correct 5 ms 380 KB Output is correct
15 Correct 5 ms 376 KB Output is correct
16 Correct 5 ms 376 KB Output is correct
17 Correct 8 ms 632 KB Output is correct
18 Correct 7 ms 632 KB Output is correct
19 Correct 10 ms 632 KB Output is correct
20 Correct 8 ms 632 KB Output is correct
21 Correct 11 ms 632 KB Output is correct
22 Correct 10 ms 632 KB Output is correct
23 Correct 10 ms 652 KB Output is correct
24 Correct 400 ms 23284 KB Output is correct
25 Correct 246 ms 25456 KB Output is correct
26 Correct 415 ms 23472 KB Output is correct
27 Correct 288 ms 29432 KB Output is correct
28 Correct 442 ms 24608 KB Output is correct
29 Correct 239 ms 23160 KB Output is correct
30 Correct 963 ms 26956 KB Output is correct
31 Correct 120 ms 15732 KB Output is correct
32 Correct 109 ms 12024 KB Output is correct
33 Correct 543 ms 25840 KB Output is correct
34 Correct 643 ms 25080 KB Output is correct
35 Correct 793 ms 27172 KB Output is correct
36 Correct 867 ms 26992 KB Output is correct
37 Correct 440 ms 23792 KB Output is correct
38 Correct 317 ms 29304 KB Output is correct
39 Correct 376 ms 29448 KB Output is correct
40 Correct 597 ms 29560 KB Output is correct
41 Correct 5 ms 376 KB Output is correct
42 Correct 897 ms 27104 KB Output is correct
43 Correct 546 ms 25584 KB Output is correct
44 Correct 664 ms 25080 KB Output is correct
45 Correct 855 ms 27188 KB Output is correct
46 Correct 2369 ms 101156 KB Output is correct
47 Correct 1600 ms 130576 KB Output is correct
48 Correct 1930 ms 130424 KB Output is correct
49 Correct 3252 ms 130552 KB Output is correct
50 Correct 5865 ms 119032 KB Output is correct
51 Correct 3406 ms 109672 KB Output is correct
52 Correct 3965 ms 104756 KB Output is correct
53 Correct 5989 ms 118200 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 419 ms 24056 KB Output is correct
2 Correct 496 ms 23776 KB Output is correct
3 Correct 256 ms 20412 KB Output is correct
4 Correct 342 ms 24024 KB Output is correct
5 Correct 5 ms 376 KB Output is correct
6 Correct 423 ms 22520 KB Output is correct
7 Correct 101 ms 11768 KB Output is correct
8 Correct 123 ms 9212 KB Output is correct
9 Correct 282 ms 20344 KB Output is correct
10 Correct 426 ms 26616 KB Output is correct
11 Correct 197 ms 20728 KB Output is correct
12 Correct 6 ms 376 KB Output is correct
13 Correct 5 ms 376 KB Output is correct
14 Correct 5 ms 376 KB Output is correct
15 Correct 5 ms 376 KB Output is correct
16 Correct 5 ms 376 KB Output is correct
17 Correct 5 ms 376 KB Output is correct
18 Correct 6 ms 376 KB Output is correct
19 Correct 5 ms 376 KB Output is correct
20 Correct 5 ms 376 KB Output is correct
21 Correct 5 ms 376 KB Output is correct
22 Correct 5 ms 376 KB Output is correct
23 Correct 5 ms 376 KB Output is correct
24 Correct 5 ms 376 KB Output is correct
25 Correct 5 ms 380 KB Output is correct
26 Correct 5 ms 376 KB Output is correct
27 Correct 5 ms 376 KB Output is correct
28 Correct 8 ms 632 KB Output is correct
29 Correct 7 ms 632 KB Output is correct
30 Correct 10 ms 632 KB Output is correct
31 Correct 8 ms 632 KB Output is correct
32 Correct 11 ms 632 KB Output is correct
33 Correct 10 ms 632 KB Output is correct
34 Correct 10 ms 652 KB Output is correct
35 Correct 400 ms 23284 KB Output is correct
36 Correct 246 ms 25456 KB Output is correct
37 Correct 415 ms 23472 KB Output is correct
38 Correct 288 ms 29432 KB Output is correct
39 Correct 442 ms 24608 KB Output is correct
40 Correct 239 ms 23160 KB Output is correct
41 Correct 963 ms 26956 KB Output is correct
42 Correct 120 ms 15732 KB Output is correct
43 Correct 109 ms 12024 KB Output is correct
44 Correct 543 ms 25840 KB Output is correct
45 Correct 643 ms 25080 KB Output is correct
46 Correct 793 ms 27172 KB Output is correct
47 Correct 867 ms 26992 KB Output is correct
48 Correct 440 ms 23792 KB Output is correct
49 Correct 317 ms 29304 KB Output is correct
50 Correct 376 ms 29448 KB Output is correct
51 Correct 597 ms 29560 KB Output is correct
52 Correct 5 ms 376 KB Output is correct
53 Correct 897 ms 27104 KB Output is correct
54 Correct 546 ms 25584 KB Output is correct
55 Correct 664 ms 25080 KB Output is correct
56 Correct 855 ms 27188 KB Output is correct
57 Correct 351 ms 22508 KB Output is correct
58 Correct 444 ms 28152 KB Output is correct
59 Correct 643 ms 28148 KB Output is correct
60 Correct 410 ms 28268 KB Output is correct
61 Correct 586 ms 25900 KB Output is correct
62 Correct 5 ms 376 KB Output is correct
63 Correct 929 ms 25828 KB Output is correct
64 Correct 575 ms 24176 KB Output is correct
65 Correct 723 ms 23616 KB Output is correct
66 Correct 886 ms 25644 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 419 ms 24056 KB Output is correct
2 Correct 496 ms 23776 KB Output is correct
3 Correct 256 ms 20412 KB Output is correct
4 Correct 342 ms 24024 KB Output is correct
5 Correct 5 ms 376 KB Output is correct
6 Correct 423 ms 22520 KB Output is correct
7 Correct 101 ms 11768 KB Output is correct
8 Correct 123 ms 9212 KB Output is correct
9 Correct 282 ms 20344 KB Output is correct
10 Correct 426 ms 26616 KB Output is correct
11 Correct 197 ms 20728 KB Output is correct
12 Correct 6 ms 376 KB Output is correct
13 Correct 5 ms 376 KB Output is correct
14 Correct 5 ms 376 KB Output is correct
15 Correct 5 ms 376 KB Output is correct
16 Correct 5 ms 376 KB Output is correct
17 Correct 5 ms 376 KB Output is correct
18 Correct 6 ms 376 KB Output is correct
19 Correct 5 ms 376 KB Output is correct
20 Correct 5 ms 376 KB Output is correct
21 Correct 5 ms 376 KB Output is correct
22 Correct 5 ms 376 KB Output is correct
23 Correct 5 ms 376 KB Output is correct
24 Correct 5 ms 376 KB Output is correct
25 Correct 5 ms 380 KB Output is correct
26 Correct 5 ms 376 KB Output is correct
27 Correct 5 ms 376 KB Output is correct
28 Correct 8 ms 632 KB Output is correct
29 Correct 7 ms 632 KB Output is correct
30 Correct 10 ms 632 KB Output is correct
31 Correct 8 ms 632 KB Output is correct
32 Correct 11 ms 632 KB Output is correct
33 Correct 10 ms 632 KB Output is correct
34 Correct 10 ms 652 KB Output is correct
35 Correct 400 ms 23284 KB Output is correct
36 Correct 246 ms 25456 KB Output is correct
37 Correct 415 ms 23472 KB Output is correct
38 Correct 288 ms 29432 KB Output is correct
39 Correct 442 ms 24608 KB Output is correct
40 Correct 239 ms 23160 KB Output is correct
41 Correct 963 ms 26956 KB Output is correct
42 Correct 120 ms 15732 KB Output is correct
43 Correct 109 ms 12024 KB Output is correct
44 Correct 543 ms 25840 KB Output is correct
45 Correct 643 ms 25080 KB Output is correct
46 Correct 793 ms 27172 KB Output is correct
47 Correct 867 ms 26992 KB Output is correct
48 Correct 440 ms 23792 KB Output is correct
49 Correct 317 ms 29304 KB Output is correct
50 Correct 376 ms 29448 KB Output is correct
51 Correct 597 ms 29560 KB Output is correct
52 Correct 5 ms 376 KB Output is correct
53 Correct 897 ms 27104 KB Output is correct
54 Correct 546 ms 25584 KB Output is correct
55 Correct 664 ms 25080 KB Output is correct
56 Correct 855 ms 27188 KB Output is correct
57 Correct 2369 ms 101156 KB Output is correct
58 Correct 1600 ms 130576 KB Output is correct
59 Correct 1930 ms 130424 KB Output is correct
60 Correct 3252 ms 130552 KB Output is correct
61 Correct 5865 ms 119032 KB Output is correct
62 Correct 3406 ms 109672 KB Output is correct
63 Correct 3965 ms 104756 KB Output is correct
64 Correct 5989 ms 118200 KB Output is correct
65 Correct 351 ms 22508 KB Output is correct
66 Correct 444 ms 28152 KB Output is correct
67 Correct 643 ms 28148 KB Output is correct
68 Correct 410 ms 28268 KB Output is correct
69 Correct 586 ms 25900 KB Output is correct
70 Correct 5 ms 376 KB Output is correct
71 Correct 929 ms 25828 KB Output is correct
72 Correct 575 ms 24176 KB Output is correct
73 Correct 723 ms 23616 KB Output is correct
74 Correct 886 ms 25644 KB Output is correct
75 Correct 1832 ms 172280 KB Output is correct
76 Correct 2402 ms 198412 KB Output is correct
77 Correct 3312 ms 188332 KB Output is correct
78 Correct 2035 ms 188456 KB Output is correct
79 Correct 6084 ms 188284 KB Output is correct
80 Correct 3546 ms 174668 KB Output is correct
81 Correct 4202 ms 169728 KB Output is correct
82 Correct 5613 ms 156456 KB Output is correct
83 Correct 5532 ms 175620 KB Output is correct