제출 #1229695

#제출 시각아이디문제언어결과실행 시간메모리
1229695SpyrosAlivFinancial Report (JOI21_financial)C++20
17 / 100
116 ms10552 KiB
#include <bits/stdc++.h> using namespace std; int n, d; vector<int> arr; class segTree { private: vector<int> seg; int query(int node, int start, int end, int l, int r) { if (start > r || end < l) return 0; else if (start >= l && end <= r) return seg[node]; else { int mid = (start + end) / 2; return max(query(node*2, start, mid, l, r), query(node*2+1, mid+1, end, l, r)); } } void update(int node, int start, int end, int idx, int v) { if (start == end) { seg[node] = v; } else { int mid = (start + end) / 2; if (idx <= mid) update(node*2, start, mid, idx, v); else update(node*2+1, mid+1, end, idx, v); seg[node] = max(seg[node*2], seg[node*2+1]); } } public: segTree(int nn) { n = nn; seg.assign(n*4+10, 0); } int query(int l, int r) { l = max(0, l); if (l > r) return 0; return query(1, 0, n-1, l, r); } void update(int idx, int v) { update(1, 0, n-1, idx, v); } }; void compress() { vector<pair<int, int>> vals; for (int i = 0; i < n; i++) vals.push_back({arr[i], i}); sort(vals.begin(), vals.end()); int t = 0; for (int i = 0; i < n; i++) { if (i > 0 && vals[i].first != vals[i-1].first) t++; arr[vals[i].second] = t; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> d; for (int i = 0; i < n; i++) { int x; cin >> x; arr.push_back(x); } if (d == n) { segTree dp(n); vector<pair<int, int>> vals; for (int i = 0; i < n; i++) { vals.push_back({arr[i], i}); } sort(vals.begin(), vals.end(), [&](pair<int, int> a, pair<int, int> b) { if (a.first != b.first) return a.first < b.first; else return a.second > b.second; }); int ans = 0; for (auto [foo, idx]: vals) { int dp2 = dp.query(idx - d, idx) + 1; ans = max(ans, dp2); dp.update(idx, dp2); } cout << ans << "\n"; } else { compress(); int ans = 1; stack<int> st; st.push(arr[n-1]); for (int i = n-2; i >= 0; i--) { while (!st.empty() && st.top() <= arr[i]) st.pop(); st.push(arr[i]); ans = max(ans, (int)st.size()); } cout << ans << "\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...
#Verdict Execution timeMemoryGrader output
Fetching results...