Hashiryo's Library

This documentation is automatically generated by competitive-verifier/competitive-verifier

View the Project on GitHub hashiryo/Library

:heavy_check_mark: test/aoj/2880.test.cpp

Depends on

Code

// competitive-verifier: PROBLEM https://onlinejudge.u-aizu.ac.jp/challenges/sources/VPC/RUPC/2880
// competitive-verifier: TLE 0.5
// competitive-verifier: MLE 64
#include <iostream>
#include <array>
#include <algorithm>
#include "src/DataStructure/RangeSet.hpp"

using namespace std;
signed main() {
 cin.tie(0);
 ios::sync_with_stdio(0);
 int N, M, Q;
 cin >> N >> M >> Q;
 array<int, 5> query[M + Q];
 for (int i= 0; i < M; ++i) {
  int D, A, B;
  cin >> D >> A >> B;
  query[i]= {D, 1, A, B, -1};
 }
 for (int i= 0; i < Q; ++i) {
  int E, S, T;
  cin >> E >> S >> T;
  query[i + M]= {E, 0, S, T, i};
 }
 sort(query, query + M + Q);
 bool ans[Q];
 RangeSet<int, false> rs;
 for (auto [d, t, a, b, i]: query) {
  if (t) rs.insert(a, b);
  else {
   if (a >= b) ans[i]= true;
   else ans[i]= rs.covered_by(a, b);
  }
 }
 for (bool a: ans) cout << (a ? "Yes" : "No") << '\n';
 return 0;
}
#line 1 "test/aoj/2880.test.cpp"
// competitive-verifier: PROBLEM https://onlinejudge.u-aizu.ac.jp/challenges/sources/VPC/RUPC/2880
// competitive-verifier: TLE 0.5
// competitive-verifier: MLE 64
#include <iostream>
#include <array>
#include <algorithm>
#line 3 "src/DataStructure/RangeSet.hpp"
#include <set>
#include <iterator>
#include <limits>
#include <cassert>
template <class Int, bool merge= true> class RangeSet {
 struct ClosedSection {
  Int l, r;
  Int length() const { return r - l + 1; }
  bool operator<(const ClosedSection &cs) const { return l < cs.l || (l == cs.l && r > cs.r); }
  operator bool() const { return l <= r; }
  friend std::ostream &operator<<(std::ostream &os, const ClosedSection &cs) { return cs ? os << "[" << cs.l << "," << cs.r << "]" : os << "∅"; }
 };
 std::set<ClosedSection> mp;
public:
 RangeSet() {
  constexpr Int INF= std::numeric_limits<Int>::max() / 2;
  mp.insert({INF, INF}), mp.insert({-INF, -INF});
 }
 ClosedSection covered_by(Int l, Int r) const {
  assert(l <= r);
  if (auto it= std::prev(mp.upper_bound(ClosedSection{l, l})); it->l <= l && r <= it->r) return *it;
  return {1, 0};
 }
 ClosedSection covered_by(Int x) const { return covered_by(x, x); }
 ClosedSection covered_by(const ClosedSection &cs) const { return covered_by(cs.l, cs.r); }
 size_t size() const { return mp.size() - 2; }
 auto begin() const { return std::next(mp.begin()); }
 auto end() const { return std::prev(mp.end()); }
 Int insert(Int l, Int r) {
  assert(l <= r);
  auto it= std::prev(mp.upper_bound(ClosedSection{l, l}));
  Int sum= 0, x= it->l, y= it->r;
  if (x <= l && r <= y) return sum;
  if (x <= l && l <= y + merge) sum+= y - (l= x) + 1, it= mp.erase(it);
  else std::advance(it, 1);
  for (; it->r < r; it= mp.erase(it)) sum+= it->r - it->l + 1;
  if (x= it->l, y= it->r; x - merge <= r && r <= y) sum+= (r= y) - x + 1, mp.erase(it);
  return mp.insert({l, r}), r - l + 1 - sum;
 }
 Int insert(Int x) { return insert(x, x); }
 Int insert(const ClosedSection &cs) { return insert(cs.l, cs.r); }
 Int erase(Int l, Int r) {
  assert(l <= r);
  auto it= std::prev(mp.upper_bound(ClosedSection{l, l}));
  Int sum= 0, x= it->l, y= it->r;
  if (x <= l && r <= y) {
   if (mp.erase(it); x < l) mp.insert({x, l - 1});
   if (r < y) mp.insert({r + 1, y});
   return r - l + 1;
  }
  if (x <= l && l <= y) {
   if (x < l) mp.insert({x, l - 1});
   sum+= y - l + 1, it= mp.erase(it);
  } else std::advance(it, 1);
  for (; it->r <= r; it= mp.erase(it)) sum+= it->r - it->l + 1;
  if (x= it->l, y= it->r; x <= r && r <= y)
   if (sum+= r - x + 1, mp.erase(it); r < y) mp.insert({r + 1, y});
  return sum;
 }
 Int erase(Int x) { return erase(x, x); }
 Int erase(const ClosedSection &cs) { return erase(cs.l, cs.r); }
 Int mex(Int x) const {
  auto cs= covered_by(x);
  return cs ? cs.r + 1 : x;
 }
 friend std::ostream &operator<<(std::ostream &os, const RangeSet &rs) {
  os << "[";
  for (auto it= rs.begin(); it != rs.end(); ++it) os << (it == rs.begin() ? "" : ",") << *it;
  return os << "]";
 }
};
#line 8 "test/aoj/2880.test.cpp"

using namespace std;
signed main() {
 cin.tie(0);
 ios::sync_with_stdio(0);
 int N, M, Q;
 cin >> N >> M >> Q;
 array<int, 5> query[M + Q];
 for (int i= 0; i < M; ++i) {
  int D, A, B;
  cin >> D >> A >> B;
  query[i]= {D, 1, A, B, -1};
 }
 for (int i= 0; i < Q; ++i) {
  int E, S, T;
  cin >> E >> S >> T;
  query[i + M]= {E, 0, S, T, i};
 }
 sort(query, query + M + Q);
 bool ans[Q];
 RangeSet<int, false> rs;
 for (auto [d, t, a, b, i]: query) {
  if (t) rs.insert(a, b);
  else {
   if (a >= b) ans[i]= true;
   else ans[i]= rs.covered_by(a, b);
  }
 }
 for (bool a: ans) cout << (a ? "Yes" : "No") << '\n';
 return 0;
}

Test cases

Env Name Status Elapsed Memory
g++-13 00_sample_00.in :heavy_check_mark: AC 7 ms 4 MB
g++-13 00_sample_01.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 10_handmade_00.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 10_handmade_01.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 10_handmade_02.in :heavy_check_mark: AC 5 ms 3 MB
g++-13 10_handmade_03.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 50_random_small_00.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 50_random_small_01.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 50_random_small_02.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 50_random_small_03.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 50_random_small_04.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 50_random_small_05.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 50_random_small_06.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 50_random_small_07.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 50_random_small_08.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 50_random_small_09.in :heavy_check_mark: AC 5 ms 4 MB
g++-13 51_random_large_00.in :heavy_check_mark: AC 37 ms 6 MB
g++-13 51_random_large_01.in :heavy_check_mark: AC 30 ms 6 MB
g++-13 51_random_large_02.in :heavy_check_mark: AC 31 ms 6 MB
g++-13 51_random_large_03.in :heavy_check_mark: AC 44 ms 7 MB
g++-13 51_random_large_04.in :heavy_check_mark: AC 35 ms 6 MB
g++-13 51_random_large_05.in :heavy_check_mark: AC 52 ms 7 MB
g++-13 51_random_large_06.in :heavy_check_mark: AC 30 ms 6 MB
g++-13 51_random_large_07.in :heavy_check_mark: AC 30 ms 6 MB
g++-13 51_random_large_08.in :heavy_check_mark: AC 37 ms 6 MB
g++-13 51_random_large_09.in :heavy_check_mark: AC 33 ms 6 MB
g++-13 52_MIN_00.in :heavy_check_mark: AC 6 ms 4 MB
g++-13 53_MAX_00.in :heavy_check_mark: AC 59 ms 8 MB
g++-13 53_MAX_01.in :heavy_check_mark: AC 60 ms 8 MB
g++-13 53_MAX_02.in :heavy_check_mark: AC 60 ms 8 MB
g++-13 53_MAX_03.in :heavy_check_mark: AC 60 ms 8 MB
g++-13 53_MAX_04.in :heavy_check_mark: AC 59 ms 8 MB
g++-13 53_MAX_05.in :heavy_check_mark: AC 59 ms 8 MB
g++-13 53_MAX_06.in :heavy_check_mark: AC 60 ms 8 MB
g++-13 53_MAX_07.in :heavy_check_mark: AC 60 ms 8 MB
g++-13 53_MAX_08.in :heavy_check_mark: AC 59 ms 8 MB
g++-13 53_MAX_09.in :heavy_check_mark: AC 60 ms 8 MB
g++-13 54_Nsmall_00.in :heavy_check_mark: AC 39 ms 6 MB
g++-13 54_Nsmall_01.in :heavy_check_mark: AC 32 ms 6 MB
g++-13 54_Nsmall_02.in :heavy_check_mark: AC 43 ms 7 MB
g++-13 54_Nsmall_03.in :heavy_check_mark: AC 20 ms 5 MB
g++-13 54_Nsmall_04.in :heavy_check_mark: AC 42 ms 6 MB
g++-13 54_Nsmall_05.in :heavy_check_mark: AC 13 ms 4 MB
g++-13 54_Nsmall_06.in :heavy_check_mark: AC 21 ms 5 MB
g++-13 54_Nsmall_07.in :heavy_check_mark: AC 28 ms 5 MB
g++-13 54_Nsmall_08.in :heavy_check_mark: AC 40 ms 6 MB
g++-13 54_Nsmall_09.in :heavy_check_mark: AC 35 ms 6 MB
g++-13 55_Msmall_00.in :heavy_check_mark: AC 9 ms 4 MB
g++-13 55_Msmall_01.in :heavy_check_mark: AC 20 ms 5 MB
g++-13 55_Msmall_02.in :heavy_check_mark: AC 8 ms 4 MB
g++-13 55_Msmall_03.in :heavy_check_mark: AC 14 ms 4 MB
g++-13 55_Msmall_04.in :heavy_check_mark: AC 12 ms 4 MB
g++-13 55_Msmall_05.in :heavy_check_mark: AC 16 ms 5 MB
g++-13 55_Msmall_06.in :heavy_check_mark: AC 17 ms 5 MB
g++-13 55_Msmall_07.in :heavy_check_mark: AC 13 ms 4 MB
g++-13 55_Msmall_08.in :heavy_check_mark: AC 19 ms 5 MB
g++-13 55_Msmall_09.in :heavy_check_mark: AC 16 ms 5 MB
g++-13 56_DEsmall_00.in :heavy_check_mark: AC 36 ms 6 MB
g++-13 56_DEsmall_01.in :heavy_check_mark: AC 56 ms 7 MB
g++-13 56_DEsmall_02.in :heavy_check_mark: AC 44 ms 7 MB
g++-13 56_DEsmall_03.in :heavy_check_mark: AC 34 ms 6 MB
g++-13 56_DEsmall_04.in :heavy_check_mark: AC 27 ms 5 MB
g++-13 56_DEsmall_05.in :heavy_check_mark: AC 28 ms 5 MB
g++-13 56_DEsmall_06.in :heavy_check_mark: AC 33 ms 6 MB
g++-13 56_DEsmall_07.in :heavy_check_mark: AC 34 ms 6 MB
g++-13 56_DEsmall_08.in :heavy_check_mark: AC 13 ms 4 MB
g++-13 56_DEsmall_09.in :heavy_check_mark: AC 29 ms 5 MB
g++-13 60_challenge_00.in :heavy_check_mark: AC 68 ms 8 MB
g++-13 60_challenge_01.in :heavy_check_mark: AC 68 ms 9 MB
clang++-18 00_sample_00.in :heavy_check_mark: AC 6 ms 4 MB
clang++-18 00_sample_01.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 10_handmade_00.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 10_handmade_01.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 10_handmade_02.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 10_handmade_03.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 50_random_small_00.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 50_random_small_01.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 50_random_small_02.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 50_random_small_03.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 50_random_small_04.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 50_random_small_05.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 50_random_small_06.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 50_random_small_07.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 50_random_small_08.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 50_random_small_09.in :heavy_check_mark: AC 5 ms 4 MB
clang++-18 51_random_large_00.in :heavy_check_mark: AC 35 ms 6 MB
clang++-18 51_random_large_01.in :heavy_check_mark: AC 29 ms 6 MB
clang++-18 51_random_large_02.in :heavy_check_mark: AC 30 ms 6 MB
clang++-18 51_random_large_03.in :heavy_check_mark: AC 42 ms 7 MB
clang++-18 51_random_large_04.in :heavy_check_mark: AC 35 ms 6 MB
clang++-18 51_random_large_05.in :heavy_check_mark: AC 48 ms 7 MB
clang++-18 51_random_large_06.in :heavy_check_mark: AC 29 ms 6 MB
clang++-18 51_random_large_07.in :heavy_check_mark: AC 29 ms 5 MB
clang++-18 51_random_large_08.in :heavy_check_mark: AC 35 ms 6 MB
clang++-18 51_random_large_09.in :heavy_check_mark: AC 31 ms 6 MB
clang++-18 52_MIN_00.in :heavy_check_mark: AC 6 ms 4 MB
clang++-18 53_MAX_00.in :heavy_check_mark: AC 54 ms 8 MB
clang++-18 53_MAX_01.in :heavy_check_mark: AC 55 ms 8 MB
clang++-18 53_MAX_02.in :heavy_check_mark: AC 55 ms 8 MB
clang++-18 53_MAX_03.in :heavy_check_mark: AC 55 ms 8 MB
clang++-18 53_MAX_04.in :heavy_check_mark: AC 56 ms 8 MB
clang++-18 53_MAX_05.in :heavy_check_mark: AC 55 ms 8 MB
clang++-18 53_MAX_06.in :heavy_check_mark: AC 55 ms 8 MB
clang++-18 53_MAX_07.in :heavy_check_mark: AC 55 ms 8 MB
clang++-18 53_MAX_08.in :heavy_check_mark: AC 55 ms 8 MB
clang++-18 53_MAX_09.in :heavy_check_mark: AC 54 ms 8 MB
clang++-18 54_Nsmall_00.in :heavy_check_mark: AC 36 ms 6 MB
clang++-18 54_Nsmall_01.in :heavy_check_mark: AC 29 ms 6 MB
clang++-18 54_Nsmall_02.in :heavy_check_mark: AC 41 ms 7 MB
clang++-18 54_Nsmall_03.in :heavy_check_mark: AC 20 ms 5 MB
clang++-18 54_Nsmall_04.in :heavy_check_mark: AC 39 ms 7 MB
clang++-18 54_Nsmall_05.in :heavy_check_mark: AC 12 ms 4 MB
clang++-18 54_Nsmall_06.in :heavy_check_mark: AC 19 ms 5 MB
clang++-18 54_Nsmall_07.in :heavy_check_mark: AC 25 ms 5 MB
clang++-18 54_Nsmall_08.in :heavy_check_mark: AC 36 ms 6 MB
clang++-18 54_Nsmall_09.in :heavy_check_mark: AC 34 ms 6 MB
clang++-18 55_Msmall_00.in :heavy_check_mark: AC 8 ms 4 MB
clang++-18 55_Msmall_01.in :heavy_check_mark: AC 19 ms 5 MB
clang++-18 55_Msmall_02.in :heavy_check_mark: AC 8 ms 4 MB
clang++-18 55_Msmall_03.in :heavy_check_mark: AC 14 ms 4 MB
clang++-18 55_Msmall_04.in :heavy_check_mark: AC 11 ms 4 MB
clang++-18 55_Msmall_05.in :heavy_check_mark: AC 15 ms 4 MB
clang++-18 55_Msmall_06.in :heavy_check_mark: AC 16 ms 4 MB
clang++-18 55_Msmall_07.in :heavy_check_mark: AC 13 ms 4 MB
clang++-18 55_Msmall_08.in :heavy_check_mark: AC 18 ms 5 MB
clang++-18 55_Msmall_09.in :heavy_check_mark: AC 16 ms 5 MB
clang++-18 56_DEsmall_00.in :heavy_check_mark: AC 34 ms 6 MB
clang++-18 56_DEsmall_01.in :heavy_check_mark: AC 52 ms 7 MB
clang++-18 56_DEsmall_02.in :heavy_check_mark: AC 41 ms 6 MB
clang++-18 56_DEsmall_03.in :heavy_check_mark: AC 33 ms 6 MB
clang++-18 56_DEsmall_04.in :heavy_check_mark: AC 26 ms 5 MB
clang++-18 56_DEsmall_05.in :heavy_check_mark: AC 26 ms 5 MB
clang++-18 56_DEsmall_06.in :heavy_check_mark: AC 30 ms 6 MB
clang++-18 56_DEsmall_07.in :heavy_check_mark: AC 31 ms 6 MB
clang++-18 56_DEsmall_08.in :heavy_check_mark: AC 11 ms 4 MB
clang++-18 56_DEsmall_09.in :heavy_check_mark: AC 23 ms 5 MB
clang++-18 60_challenge_00.in :heavy_check_mark: AC 56 ms 8 MB
clang++-18 60_challenge_01.in :heavy_check_mark: AC 66 ms 9 MB
Back to top page