제출 #1094703

#제출 시각아이디문제언어결과실행 시간메모리
1094703crafticatEvent Hopping (BOI22_events)C++17
0 / 100
168 ms16324 KiB
#include "bits/stdc++.h" using namespace std; template<typename T> using V = vector<T>; using vi = V<int>; using pi = pair<int,int>; #define f first #define s second #define F0R(i, n) for(int i = 0; i < n;i++) #define FOR(i,a, n) for(int i = a; i < n;i++) #define pb push_back #define all(x) begin(x), end(x) #define each(x, y) for(auto &x : y) #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; constexpr int INF = 1e9 + 2; pi binarySearch(V<pi> &stack, int point) { auto it = std::upper_bound(stack.begin(), stack.end(), make_pair(point,INF)); // Point to before or at point if (it == stack.begin()) return {0,0}; it--; return {it - stack.begin() + 1, it->s}; } int getImp(V<pi> &stack) { return (stack.empty() ? 0 : stack.back().s); } int main() { int n, q; cin >> n >> q; V<pair<pi, int>> edges; map<int, V<pi>> queries; V<int> ans(q, -1); F0R(i, n) { int a, b; cin >> a >> b; edges.pb({{b, a},i}); } F0R(i, q) { int a, b; cin >> a >> b; a--; b--; queries[b].push_back({edges[a].f.f,i}); } sort(all(edges)); V<pi> stack; // Point, possible prefix // Self bug? // Note not efficient if q(s).size == n each(edgeDATA, edges) { auto [edge, id] = edgeDATA; swap(edge.f, edge.s); pi last = {-1,-1}; while (!stack.empty() && stack.back().f >= edge.f) { last = stack.back(); stack.pop_back(); } if (last.f != -1) stack.push_back(last); stack.emplace_back(edge.s, getImp(stack) + (last.f == -1 ? 1 : 0)); each(starts, queries[id]) { auto data = binarySearch(stack, starts.f); if (getImp(stack) - data.s > 0) continue; ans[starts.s] = stack.size() - data.f; } } F0R(i, q) { if (ans[i] == -1) cout << "impossible\n"; else cout << ans[i] << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...