Submission #1129635

#TimeUsernameProblemLanguageResultExecution timeMemory
1129635c0det1gerBouquet (EGOI24_bouquet)C++20
100 / 100
177 ms21040 KiB
#include <bits/stdc++.h> #pragma GCC optimize ("O3") #pragma GCC target ("sse4") using namespace std; #define int long long #define bochi_orz cin.tie(0);cin.sync_with_stdio(0); vector<int> node(1 << 20); int k, u, a, b; void edit(int l, int r, int id){ if (l == r){ node[id] = u; return; } int mid = (l + r) / 2; if (k <= mid){ edit(l, mid, id * 2); } else{ edit(mid + 1, r, id * 2 + 1); } node[id] = max(node[id * 2], node[id * 2 + 1]); } int query(int l, int r, int id){ if (l >= a && r <= b){ return node[id]; } int mid = (l + r) / 2; if (a > mid){ return query(mid + 1, r, id * 2 + 1); } else if (b <= mid){ return query(l, mid, id * 2); } return max(query(l, mid, id * 2), query(mid + 1, r, id * 2 + 1)); } signed main() { bochi_orz int n; cin >> n; set<pair<int, pair<int, int>>> st; for (int i = 1; i <= n; i++){ k = i; u = 0; edit(1, n, 1); } int ma = 0; for (int i = 1; i <= n; i++){ int l, r; cin >> l >> r; a = 1; b = i - l - 1; int ans; if (b <= 0){ ans = 0; } else{ ans = query(1, n, 1); } ans++; ma = max(ma, ans); st.insert({i + r, {ans, i}}); while (!st.empty() && (*st.begin()).first <= i){ k = (*st.begin()).second.second; u = (*st.begin()).second.first; edit(1, n, 1); st.erase(st.begin()); } } cout << ma << "\n"; } /* ____ ___ ___ ____ _____ ____ ____ ___ | | | | \ | | /| | | | \ | | | | | |____ | | | _ |____ |___/ | | | | | | | | | | | | \ |____ |___| |___/ |____ | __|__ |____| |____ | \ */
#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...