제출 #1167882

#제출 시각아이디문제언어결과실행 시간메모리
1167882Hamed_GhaffariFinancial Report (JOI21_financial)C++20
19 / 100
354 ms15240 KiB
#include <bits/stdc++.h> using namespace std; #define maxs(a,b) (a=max(a,b)) #define lc id<<1 #define rc lc|1 #define mid ((l+r)>>1) #define pb push_back #define all(x) x.begin(), x.end() const int MXN = 3e5+5; int N, mx[MXN<<2], mxpos[MXN<<2], lz[MXN<<2]; inline void apply(int x, int id) { mxpos[id] = x; lz[id] = x; } inline void shift(int l, int r, int id) { if(r-l>1 && lz[id]) { apply(lz[id], lc); apply(lz[id], rc); } lz[id] = 0; } void upd(int s, int e, int x, int l=0, int r=N, int id=1) { shift(l, r, id); if(s<=l && r<=e) { apply(x, id); return; } if(s<mid) upd(s, e, x, l, mid, lc); if(e>mid) upd(s, e, x, mid, r, rc); mxpos[id] = max(mxpos[lc], mxpos[rc]); } void modify(int p, int x, int l=0, int r=N, int id=1) { if(r-l == 1) { maxs(mx[id], x); return; } p<mid ? modify(p, x, l, mid, lc) : modify(p, x, mid, r, rc); mx[id] = max(mx[lc], mx[rc]); } int find(int x, int l=0, int r=N, int id=1) { shift(l, r, id); if(mxpos[id]<x) return -1; if(r-l==1) return l; int res = find(x, l, mid, lc); return res==-1 ? find(x, mid, r, rc) : res; } int get(int s, int e, int l=0, int r=N, int id=1) { if(s<=l && r<=e) return mx[id]; if(e<=mid) return get(s, e, l, mid, lc); if(s>=mid) return get(s, e, mid, r, rc); return max(get(s, e, l, mid, lc), get(s, e, mid, r, rc)); } int n, d, a[MXN]; vector<int> cmp; int32_t main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); cin >> n >> d; for(int i=1; i<=n; i++) { cin >> a[i]; cmp.pb(a[i]); } sort(all(cmp)); cmp.resize(unique(all(cmp))-cmp.begin()); N = cmp.size(); for(int i=1; i<=n; i++) { a[i] = lower_bound(all(cmp), a[i])-cmp.begin(); int pos = find(i-d); if(pos!=-1 && pos<a[i]) modify(a[i], get(pos, a[i])+1); else modify(a[i], 1); upd(a[i], N, i); } cout << get(find(n), N) << '\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...