Submission #1240244

#TimeUsernameProblemLanguageResultExecution timeMemory
1240244trantrungkeinFinancial Report (JOI21_financial)C++20
0 / 100
242 ms23320 KiB
#include<bits/stdc++.h> #define For(i,a,b) for(int i = (a); i <= (b); i++) using namespace std; const int N = 3e5 + 7; int last[N],st[4*N+1],n,D,ans = 1,a[N]; vector<pair<int,int>> num; int Find(int u) { return (last[u] == u) ? u : last[u] = Find(last[u]); } void Union(int u, int v) { u = Find(u); v = Find(v); if(u == v) return; if(v < u) swap(u,v); last[v] = u; } void update(int id, int l, int r, int pos, int val) { if(pos > r || pos < l) return; if(l == r) { st[id] = val; return; } int mid = (l+r)/2; update(2*id,l,mid,pos,val); update(2*id+1,mid+1,r,pos,val); st[id] = max(st[2*id],st[2*id+1]); } int get(int id, int l, int r, int u, int v) { if(l > v || r < u) return 0; if(u <= l && r <= v) return st[id]; int mid = (l+r)/2; return max(get(2*id,l,mid,u,v),get(2*id+1,mid+1,r,u,v)); } int main() { ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin >> n >> D; For(i,1,n) { last[i] = i; cin >> a[i]; num.push_back({a[i],-i}); } sort(num.begin(),num.end()); set<int> ID; for(pair<int,int> o : num) { o.second = -o.second; if(ID.empty()) { update(1,1,n,o.second,1); ID.insert(o.second); continue; } auto it = ID.upper_bound(o.second); if(it == ID.begin()) { update(1,1,n,o.second,1); ID.insert(o.second); continue; } it--; if(o.second - (*it) <= D) { Union(o.second,*it); int value = get(1,1,n,last[o.second],o.second)+1; ans = max(ans,value); update(1,1,n,o.second,value); } else { update(1,1,n,o.second,1); } ID.insert(o.second); } cout << ans; }
#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...