Submission #1134249

#TimeUsernameProblemLanguageResultExecution timeMemory
1134249ByeWorldFinancial Report (JOI21_financial)C++20
100 / 100
609 ms26916 KiB
#include <bits/stdc++.h> // #define int long long #define ll long long #define pb push_back #define fi first #define se second #define lf (id<<1) #define rg ((id<<1)|1) #define md ((l+r)>>1) #define ld long double using namespace std; typedef pair<int,int> pii; typedef pair<char,char> pcc; typedef pair<int,pii> ipii; typedef pair<pii,pii> ipiii; const int MAXN = 3e5+10; const int SQRT = 610; const int MAXA = 50; const int MOD = 1e6+7; const int INF = 1e9+10; const int LOG = 30; int n, d, a[MAXN]; vector <pii> vec, vec2; int ANS, dp[MAXN], tag[MAXN], las[MAXN]; struct seg { int st[4*MAXN]; int que(int id, int l, int r, int x, int y){ if(x<=l && r<=y) return st[id]; if(r<x || y<l) return 0; return max(que(lf,l,md,x,y), que(rg,md+1,r,x,y)); } int upd(int id, int l, int r, int x, int p){ if(l==r && l==x) return st[id] = p; if(r<x || x<l)return st[id]; return st[id] = max(upd(lf,l,md,x,p),upd(rg,md+1,r,x,p)); } } A; signed main(){ // ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>d; for(int i=1; i<=n; i++){ cin>>a[i]; vec.pb({a[i],i}); vec2.pb({a[i],-i}); } sort(vec2.begin(), vec2.end()); set <int> idx, alive; alive.insert(0); for(auto [x, id] : vec2){ id = -id; auto it = idx.upper_bound(id); if(it==idx.begin() || (*prev(it))+d < id) alive.insert(id); idx.insert(id); it = alive.upper_bound(id); if(it!=alive.end() && *it <= id+d) alive.erase(it); las[id] = *prev(alive.upper_bound(id)); // cout << id << ' ' << las[id] << " las\n"; } for(auto [x, id] : vec2){ id = -id; dp[id] = A.que(1,1,n,las[id],id)+1; A.upd(1,1,n,id,dp[id]); ANS = max(ANS, dp[id]); } 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...