voidgetseg(){ L = 1, R = 1e6; std::vector<std::pair<int, int>> vec; for (int i = 1; i <= k; ++i) { // std::cerr << l[i] << ' ' << r[i] << '\n'; if (l[i] > r[i]) returnvoid(R = 0); vec.emplace_back(l[i], r[i]); } std::sort(vec.begin(), vec.end(), [&] (auto p1, auto p2) { return p1.second < p2.second; }); std::set<int> st; for (int i = 1; i <= k - 1; ++i) st.emplace(s[i]); bool fl = 0; for (auto [l, r] : vec) { auto it = st.lower_bound(l); if (it != st.end() && *it <= r) { st.erase(it); } else { if (fl) returnvoid(R = 0); fl = 1, R = r; } }
std::sort(vec.begin(), vec.end(), [&] (auto p1, auto p2) { return p1.first > p2.first; }); fl = 0, st.clear(); for (int i = 1; i <= k - 1; ++i) st.emplace(s[i]); for (auto [l, r] : vec) { auto it = st.upper_bound(r); if (it != st.begin() && *--it >= l) { st.erase(it); } else { if (fl) returnvoid(R = 0); fl = 1, L = l; } } }
voiddickdreamer(){ std::cin >> n >> q; k = 0; for (int i = 1; i <= n; ++i) std::cin >> p[i]; for (int i = 1; i <= n; ++i) { std::cin >> a[i]; if (!a[i]) pos[i] = ++k; } for (int i = 1; i <= k - 1; ++i) std::cin >> s[i]; build(); for (int i = 1; i <= n; ++i) ll[i] = 1, rr[i] = 1e6; dfs(rt), getseg(); for (int i = 1; i <= n; ++i) if (ll[i] > rr[i]) R = 0; for (int i = 1; i <= q; ++i) { int d; std::cin >> d; std::cout << (d >= L && d <= R ? "YES\n" : "NO\n"); } }