Submission #395511

# Submission time Handle Problem Language Result Execution time Memory
395511 2021-04-28T12:18:21 Z rama_pang Segments (IZhO18_segments) C++17
100 / 100
1963 ms 10604 KB
#include <bits/stdc++.h>
using namespace std;

const int BLOCK = 1800;
const int BSIZE = 200005 / BLOCK + 5;

class Solver {
 public:
  vector<pair<int, int>> pending;
  vector<pair<int, int>> intervals;

  vector<int> lengths[BSIZE]; // (r - l + 1)
  pair<int, int> minmaxl[BSIZE]; // min and max l in blockslr[]
  vector<pair<int, int>> blockslr[BSIZE]; // (l, r)

  int Isect(int a, int b, int l, int r) {
    return max(0, min(b, r) - max(a, l) + 1);
  }

  void Insert(int l, int r) {
    pending.emplace_back(l, r);
    if (pending.size() >= BLOCK) {
      for (auto p : pending) intervals.emplace_back(p);
      sort(begin(intervals), end(intervals));
      pending.clear();

      for (int i = 0; i < int(intervals.size()); i += BLOCK) {
        int b = i / BLOCK;
        lengths[b].clear();
        blockslr[b].clear();
        minmaxl[b] = {intervals[i].first, intervals[i].first};
        for (int j = i; j < min(int(intervals.size()), i + BLOCK); j++) {
          lengths[b].emplace_back(intervals[j].second - intervals[j].first + 1);
          blockslr[b].emplace_back(intervals[j]);
          minmaxl[b].first  = min(minmaxl[b].first,  intervals[j].first);
          minmaxl[b].second = max(minmaxl[b].second, intervals[j].first);
        }
        sort(begin(lengths[b]), end(lengths[b]));
        sort(begin(blockslr[b]), end(blockslr[b]), [&](auto &x, auto &y) {
          return x.second < y.second;
        });
      }
    }
  }

  int Query(int l, int r, int k) {
    if (r - l + 1 < k) return 0;

    int res = 0;
    for (auto p : pending) res += Isect(p.first, p.second, l, r) >= k;

    for (int i = 0; i < int(intervals.size()); i += BLOCK) {
      int b = i / BLOCK;
      if (minmaxl[b].second < l) {
        // right endpoint must be >= l + k - 1
        int lo = 0, hi = int(blockslr[b].size());
        while (lo < hi) {
          int md = (lo + hi) / 2;
          if (blockslr[b][md].second >= l + k - 1) {
            hi = md;
          } else {
            lo = md + 1;
          }
        }
        res += int(blockslr[b].size()) - lo;
      } else if (minmaxl[b].first < l && l <= minmaxl[b].second) { // will only trigger once
        for (auto p : blockslr[b]) res += Isect(p.first, p.second, l, r) >= k;
      } else if (l <= minmaxl[b].first && minmaxl[b].second <= r - k + 1) {
        // must count interval length >= k
        int lo = 0, hi = int(lengths[b].size());
        while (lo < hi) {
          int md = (lo + hi) / 2;
          if (lengths[b][md] >= k) {
            hi = md;
          } else {
            lo = md + 1;
          }
        }
        res += int(lengths[b].size()) - lo;
      } else if (minmaxl[b].first <= r - k + 1 && r - k + 1 < minmaxl[b].second) { // will only trigger once
        for (auto p : blockslr[b]) res += Isect(p.first, p.second, l, r) >= k;
      } else if (r - k + 1 < minmaxl[b].first) {
        // interval intersect on < k points
      } else {
        assert(false);
      }
    }

    return res;
  }
} positive, negative;

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

  int n, t;
  cin >> n >> t;

  int lastans = 0;
  vector<int> l, r;

  while (n--) {
    int type;
    cin >> type;
    if (type == 1) {
      int a, b;
      cin >> a >> b;
      a = (a ^ (t * lastans));
      b = (b ^ (t * lastans));
      if (a > b) swap(a, b);
      l.emplace_back(a);
      r.emplace_back(b);
      positive.Insert(a, b);
    } else if (type == 2) {
      int id;
      cin >> id;
      id--;
      negative.Insert(l[id], r[id]);
    } else if (type == 3) {
      int a, b, k;
      cin >> a >> b >> k;
      a = (a ^ (t * lastans));
      b = (b ^ (t * lastans));
      if (a > b) swap(a, b);
      lastans = positive.Query(a, b, k) - negative.Query(a, b, k);
      cout << lastans << '\n';
    }
  }
  return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 8 ms 332 KB Output is correct
4 Correct 8 ms 404 KB Output is correct
5 Correct 8 ms 532 KB Output is correct
6 Correct 10 ms 476 KB Output is correct
7 Correct 9 ms 332 KB Output is correct
8 Correct 8 ms 332 KB Output is correct
9 Correct 8 ms 444 KB Output is correct
10 Correct 4 ms 460 KB Output is correct
11 Correct 15 ms 444 KB Output is correct
12 Correct 15 ms 460 KB Output is correct
13 Correct 5 ms 460 KB Output is correct
14 Correct 10 ms 332 KB Output is correct
15 Correct 8 ms 404 KB Output is correct
16 Correct 8 ms 396 KB Output is correct
17 Correct 9 ms 436 KB Output is correct
18 Correct 5 ms 460 KB Output is correct
19 Correct 9 ms 460 KB Output is correct
20 Correct 8 ms 460 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 688 ms 2948 KB Output is correct
2 Correct 676 ms 4796 KB Output is correct
3 Correct 672 ms 4772 KB Output is correct
4 Correct 626 ms 4888 KB Output is correct
5 Correct 531 ms 5392 KB Output is correct
6 Correct 508 ms 5440 KB Output is correct
7 Correct 670 ms 4868 KB Output is correct
8 Correct 688 ms 4764 KB Output is correct
9 Correct 672 ms 4708 KB Output is correct
10 Correct 788 ms 4412 KB Output is correct
11 Correct 589 ms 4380 KB Output is correct
12 Correct 539 ms 5100 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 657 ms 3188 KB Output is correct
2 Correct 650 ms 3964 KB Output is correct
3 Correct 648 ms 4092 KB Output is correct
4 Correct 647 ms 4244 KB Output is correct
5 Correct 612 ms 4900 KB Output is correct
6 Correct 640 ms 4760 KB Output is correct
7 Correct 582 ms 4992 KB Output is correct
8 Correct 526 ms 5336 KB Output is correct
9 Correct 493 ms 5412 KB Output is correct
10 Correct 522 ms 5100 KB Output is correct
11 Correct 652 ms 4452 KB Output is correct
12 Correct 523 ms 5124 KB Output is correct
13 Correct 510 ms 5012 KB Output is correct
14 Correct 566 ms 4508 KB Output is correct
15 Correct 574 ms 4636 KB Output is correct
16 Correct 589 ms 4256 KB Output is correct
17 Correct 690 ms 4380 KB Output is correct
18 Correct 684 ms 4480 KB Output is correct
19 Correct 693 ms 4576 KB Output is correct
20 Correct 693 ms 4332 KB Output is correct
21 Correct 652 ms 4148 KB Output is correct
22 Correct 573 ms 4556 KB Output is correct
23 Correct 533 ms 4984 KB Output is correct
24 Correct 562 ms 4624 KB Output is correct
25 Correct 647 ms 4096 KB Output is correct
26 Correct 653 ms 4088 KB Output is correct
27 Correct 655 ms 4036 KB Output is correct
28 Correct 644 ms 4060 KB Output is correct
29 Correct 537 ms 5228 KB Output is correct
30 Correct 539 ms 5152 KB Output is correct
31 Correct 503 ms 5392 KB Output is correct
32 Correct 510 ms 5124 KB Output is correct
33 Correct 513 ms 4856 KB Output is correct
34 Correct 565 ms 4528 KB Output is correct
35 Correct 552 ms 4820 KB Output is correct
36 Correct 498 ms 5008 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 626 ms 2996 KB Output is correct
2 Correct 618 ms 4272 KB Output is correct
3 Correct 616 ms 4412 KB Output is correct
4 Correct 619 ms 4204 KB Output is correct
5 Correct 567 ms 5080 KB Output is correct
6 Correct 736 ms 4272 KB Output is correct
7 Correct 537 ms 5416 KB Output is correct
8 Correct 683 ms 4428 KB Output is correct
9 Correct 554 ms 4756 KB Output is correct
10 Correct 488 ms 5136 KB Output is correct
11 Correct 604 ms 4448 KB Output is correct
12 Correct 502 ms 5320 KB Output is correct
13 Correct 514 ms 5124 KB Output is correct
14 Correct 543 ms 4644 KB Output is correct
15 Correct 509 ms 5384 KB Output is correct
16 Correct 512 ms 5168 KB Output is correct
17 Correct 674 ms 4792 KB Output is correct
18 Correct 669 ms 4732 KB Output is correct
19 Correct 673 ms 4664 KB Output is correct
20 Correct 668 ms 4644 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 8 ms 332 KB Output is correct
4 Correct 8 ms 404 KB Output is correct
5 Correct 8 ms 532 KB Output is correct
6 Correct 10 ms 476 KB Output is correct
7 Correct 9 ms 332 KB Output is correct
8 Correct 8 ms 332 KB Output is correct
9 Correct 8 ms 444 KB Output is correct
10 Correct 4 ms 460 KB Output is correct
11 Correct 15 ms 444 KB Output is correct
12 Correct 15 ms 460 KB Output is correct
13 Correct 5 ms 460 KB Output is correct
14 Correct 10 ms 332 KB Output is correct
15 Correct 8 ms 404 KB Output is correct
16 Correct 8 ms 396 KB Output is correct
17 Correct 9 ms 436 KB Output is correct
18 Correct 5 ms 460 KB Output is correct
19 Correct 9 ms 460 KB Output is correct
20 Correct 8 ms 460 KB Output is correct
21 Correct 688 ms 2948 KB Output is correct
22 Correct 676 ms 4796 KB Output is correct
23 Correct 672 ms 4772 KB Output is correct
24 Correct 626 ms 4888 KB Output is correct
25 Correct 531 ms 5392 KB Output is correct
26 Correct 508 ms 5440 KB Output is correct
27 Correct 670 ms 4868 KB Output is correct
28 Correct 688 ms 4764 KB Output is correct
29 Correct 672 ms 4708 KB Output is correct
30 Correct 788 ms 4412 KB Output is correct
31 Correct 589 ms 4380 KB Output is correct
32 Correct 539 ms 5100 KB Output is correct
33 Correct 626 ms 2996 KB Output is correct
34 Correct 618 ms 4272 KB Output is correct
35 Correct 616 ms 4412 KB Output is correct
36 Correct 619 ms 4204 KB Output is correct
37 Correct 567 ms 5080 KB Output is correct
38 Correct 736 ms 4272 KB Output is correct
39 Correct 537 ms 5416 KB Output is correct
40 Correct 683 ms 4428 KB Output is correct
41 Correct 554 ms 4756 KB Output is correct
42 Correct 488 ms 5136 KB Output is correct
43 Correct 604 ms 4448 KB Output is correct
44 Correct 502 ms 5320 KB Output is correct
45 Correct 514 ms 5124 KB Output is correct
46 Correct 543 ms 4644 KB Output is correct
47 Correct 509 ms 5384 KB Output is correct
48 Correct 512 ms 5168 KB Output is correct
49 Correct 674 ms 4792 KB Output is correct
50 Correct 669 ms 4732 KB Output is correct
51 Correct 673 ms 4664 KB Output is correct
52 Correct 668 ms 4644 KB Output is correct
53 Correct 612 ms 4296 KB Output is correct
54 Correct 609 ms 4384 KB Output is correct
55 Correct 619 ms 4368 KB Output is correct
56 Correct 607 ms 4284 KB Output is correct
57 Correct 721 ms 4580 KB Output is correct
58 Correct 537 ms 4180 KB Output is correct
59 Correct 544 ms 5088 KB Output is correct
60 Correct 562 ms 4184 KB Output is correct
61 Correct 517 ms 5168 KB Output is correct
62 Correct 504 ms 5520 KB Output is correct
63 Correct 496 ms 5356 KB Output is correct
64 Correct 506 ms 5452 KB Output is correct
65 Correct 574 ms 4552 KB Output is correct
66 Correct 578 ms 4416 KB Output is correct
67 Correct 499 ms 5040 KB Output is correct
68 Correct 523 ms 4888 KB Output is correct
69 Correct 675 ms 4776 KB Output is correct
70 Correct 675 ms 4992 KB Output is correct
71 Correct 677 ms 4824 KB Output is correct
72 Correct 675 ms 4664 KB Output is correct
73 Correct 580 ms 4740 KB Output is correct
74 Correct 523 ms 4788 KB Output is correct
75 Correct 512 ms 5572 KB Output is correct
76 Correct 515 ms 5392 KB Output is correct
77 Correct 601 ms 4304 KB Output is correct
78 Correct 624 ms 4312 KB Output is correct
79 Correct 617 ms 4332 KB Output is correct
80 Correct 604 ms 4284 KB Output is correct
81 Correct 538 ms 5016 KB Output is correct
82 Correct 585 ms 4640 KB Output is correct
83 Correct 598 ms 4412 KB Output is correct
84 Correct 533 ms 4892 KB Output is correct
85 Correct 502 ms 5256 KB Output is correct
86 Correct 496 ms 5136 KB Output is correct
87 Correct 547 ms 4796 KB Output is correct
88 Correct 588 ms 4400 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 8 ms 332 KB Output is correct
4 Correct 8 ms 404 KB Output is correct
5 Correct 8 ms 532 KB Output is correct
6 Correct 10 ms 476 KB Output is correct
7 Correct 9 ms 332 KB Output is correct
8 Correct 8 ms 332 KB Output is correct
9 Correct 8 ms 444 KB Output is correct
10 Correct 4 ms 460 KB Output is correct
11 Correct 15 ms 444 KB Output is correct
12 Correct 15 ms 460 KB Output is correct
13 Correct 5 ms 460 KB Output is correct
14 Correct 10 ms 332 KB Output is correct
15 Correct 8 ms 404 KB Output is correct
16 Correct 8 ms 396 KB Output is correct
17 Correct 9 ms 436 KB Output is correct
18 Correct 5 ms 460 KB Output is correct
19 Correct 9 ms 460 KB Output is correct
20 Correct 8 ms 460 KB Output is correct
21 Correct 688 ms 2948 KB Output is correct
22 Correct 676 ms 4796 KB Output is correct
23 Correct 672 ms 4772 KB Output is correct
24 Correct 626 ms 4888 KB Output is correct
25 Correct 531 ms 5392 KB Output is correct
26 Correct 508 ms 5440 KB Output is correct
27 Correct 670 ms 4868 KB Output is correct
28 Correct 688 ms 4764 KB Output is correct
29 Correct 672 ms 4708 KB Output is correct
30 Correct 788 ms 4412 KB Output is correct
31 Correct 589 ms 4380 KB Output is correct
32 Correct 539 ms 5100 KB Output is correct
33 Correct 657 ms 3188 KB Output is correct
34 Correct 650 ms 3964 KB Output is correct
35 Correct 648 ms 4092 KB Output is correct
36 Correct 647 ms 4244 KB Output is correct
37 Correct 612 ms 4900 KB Output is correct
38 Correct 640 ms 4760 KB Output is correct
39 Correct 582 ms 4992 KB Output is correct
40 Correct 526 ms 5336 KB Output is correct
41 Correct 493 ms 5412 KB Output is correct
42 Correct 522 ms 5100 KB Output is correct
43 Correct 652 ms 4452 KB Output is correct
44 Correct 523 ms 5124 KB Output is correct
45 Correct 510 ms 5012 KB Output is correct
46 Correct 566 ms 4508 KB Output is correct
47 Correct 574 ms 4636 KB Output is correct
48 Correct 589 ms 4256 KB Output is correct
49 Correct 690 ms 4380 KB Output is correct
50 Correct 684 ms 4480 KB Output is correct
51 Correct 693 ms 4576 KB Output is correct
52 Correct 693 ms 4332 KB Output is correct
53 Correct 652 ms 4148 KB Output is correct
54 Correct 573 ms 4556 KB Output is correct
55 Correct 533 ms 4984 KB Output is correct
56 Correct 562 ms 4624 KB Output is correct
57 Correct 647 ms 4096 KB Output is correct
58 Correct 653 ms 4088 KB Output is correct
59 Correct 655 ms 4036 KB Output is correct
60 Correct 644 ms 4060 KB Output is correct
61 Correct 537 ms 5228 KB Output is correct
62 Correct 539 ms 5152 KB Output is correct
63 Correct 503 ms 5392 KB Output is correct
64 Correct 510 ms 5124 KB Output is correct
65 Correct 513 ms 4856 KB Output is correct
66 Correct 565 ms 4528 KB Output is correct
67 Correct 552 ms 4820 KB Output is correct
68 Correct 498 ms 5008 KB Output is correct
69 Correct 626 ms 2996 KB Output is correct
70 Correct 618 ms 4272 KB Output is correct
71 Correct 616 ms 4412 KB Output is correct
72 Correct 619 ms 4204 KB Output is correct
73 Correct 567 ms 5080 KB Output is correct
74 Correct 736 ms 4272 KB Output is correct
75 Correct 537 ms 5416 KB Output is correct
76 Correct 683 ms 4428 KB Output is correct
77 Correct 554 ms 4756 KB Output is correct
78 Correct 488 ms 5136 KB Output is correct
79 Correct 604 ms 4448 KB Output is correct
80 Correct 502 ms 5320 KB Output is correct
81 Correct 514 ms 5124 KB Output is correct
82 Correct 543 ms 4644 KB Output is correct
83 Correct 509 ms 5384 KB Output is correct
84 Correct 512 ms 5168 KB Output is correct
85 Correct 674 ms 4792 KB Output is correct
86 Correct 669 ms 4732 KB Output is correct
87 Correct 673 ms 4664 KB Output is correct
88 Correct 668 ms 4644 KB Output is correct
89 Correct 612 ms 4296 KB Output is correct
90 Correct 609 ms 4384 KB Output is correct
91 Correct 619 ms 4368 KB Output is correct
92 Correct 607 ms 4284 KB Output is correct
93 Correct 721 ms 4580 KB Output is correct
94 Correct 537 ms 4180 KB Output is correct
95 Correct 544 ms 5088 KB Output is correct
96 Correct 562 ms 4184 KB Output is correct
97 Correct 517 ms 5168 KB Output is correct
98 Correct 504 ms 5520 KB Output is correct
99 Correct 496 ms 5356 KB Output is correct
100 Correct 506 ms 5452 KB Output is correct
101 Correct 574 ms 4552 KB Output is correct
102 Correct 578 ms 4416 KB Output is correct
103 Correct 499 ms 5040 KB Output is correct
104 Correct 523 ms 4888 KB Output is correct
105 Correct 675 ms 4776 KB Output is correct
106 Correct 675 ms 4992 KB Output is correct
107 Correct 677 ms 4824 KB Output is correct
108 Correct 675 ms 4664 KB Output is correct
109 Correct 580 ms 4740 KB Output is correct
110 Correct 523 ms 4788 KB Output is correct
111 Correct 512 ms 5572 KB Output is correct
112 Correct 515 ms 5392 KB Output is correct
113 Correct 601 ms 4304 KB Output is correct
114 Correct 624 ms 4312 KB Output is correct
115 Correct 617 ms 4332 KB Output is correct
116 Correct 604 ms 4284 KB Output is correct
117 Correct 538 ms 5016 KB Output is correct
118 Correct 585 ms 4640 KB Output is correct
119 Correct 598 ms 4412 KB Output is correct
120 Correct 533 ms 4892 KB Output is correct
121 Correct 502 ms 5256 KB Output is correct
122 Correct 496 ms 5136 KB Output is correct
123 Correct 547 ms 4796 KB Output is correct
124 Correct 588 ms 4400 KB Output is correct
125 Correct 1634 ms 8584 KB Output is correct
126 Correct 1604 ms 8348 KB Output is correct
127 Correct 1636 ms 8600 KB Output is correct
128 Correct 1597 ms 8620 KB Output is correct
129 Correct 1638 ms 8604 KB Output is correct
130 Correct 1601 ms 8712 KB Output is correct
131 Correct 1277 ms 8284 KB Output is correct
132 Correct 1799 ms 9120 KB Output is correct
133 Correct 1795 ms 9564 KB Output is correct
134 Correct 1369 ms 8188 KB Output is correct
135 Correct 1860 ms 9712 KB Output is correct
136 Correct 1420 ms 7540 KB Output is correct
137 Correct 1908 ms 10392 KB Output is correct
138 Correct 1662 ms 10156 KB Output is correct
139 Correct 1770 ms 10188 KB Output is correct
140 Correct 1865 ms 10404 KB Output is correct
141 Correct 1690 ms 9768 KB Output is correct
142 Correct 1628 ms 8284 KB Output is correct
143 Correct 1608 ms 8708 KB Output is correct
144 Correct 1585 ms 8564 KB Output is correct
145 Correct 1868 ms 10216 KB Output is correct
146 Correct 1619 ms 9028 KB Output is correct
147 Correct 1576 ms 8704 KB Output is correct
148 Correct 1643 ms 8656 KB Output is correct
149 Correct 1761 ms 9360 KB Output is correct
150 Correct 1733 ms 9244 KB Output is correct
151 Correct 1731 ms 9236 KB Output is correct
152 Correct 1756 ms 9172 KB Output is correct
153 Correct 1735 ms 9180 KB Output is correct
154 Correct 1742 ms 9156 KB Output is correct
155 Correct 1624 ms 8572 KB Output is correct
156 Correct 1598 ms 8840 KB Output is correct
157 Correct 1892 ms 10324 KB Output is correct
158 Correct 1919 ms 10324 KB Output is correct
159 Correct 1669 ms 9880 KB Output is correct
160 Correct 1596 ms 9220 KB Output is correct
161 Correct 1614 ms 8628 KB Output is correct
162 Correct 1617 ms 8576 KB Output is correct
163 Correct 1610 ms 8216 KB Output is correct
164 Correct 1601 ms 8912 KB Output is correct
165 Correct 1601 ms 8504 KB Output is correct
166 Correct 1600 ms 8468 KB Output is correct
167 Correct 1913 ms 10604 KB Output is correct
168 Correct 1963 ms 10528 KB Output is correct
169 Correct 1898 ms 10424 KB Output is correct
170 Correct 1803 ms 10176 KB Output is correct
171 Correct 1711 ms 9900 KB Output is correct
172 Correct 1603 ms 9084 KB Output is correct
173 Correct 1867 ms 10240 KB Output is correct
174 Correct 1584 ms 8976 KB Output is correct
175 Correct 1732 ms 9872 KB Output is correct
176 Correct 1572 ms 8584 KB Output is correct
177 Correct 1681 ms 9800 KB Output is correct
178 Correct 1653 ms 10240 KB Output is correct