Submission #1130449

#TimeUsernameProblemLanguageResultExecution timeMemory
1130449VMaksimoski008Financial Report (JOI21_financial)C++17
0 / 100
4094 ms7460 KiB
#include <bits/stdc++.h> #define ar array //#define int long long using namespace std; using ll = long long; using pii = pair<int, int>; using pll = pair<ll, ll>; const int mod = 1e9 + 7; const int LOG = 20; const int maxn = 1e5 + 5; struct union_find { int n; vector<int> par, size; union_find(int _n) : n(_n), par(n+1), size(n+1, 1) { for(int i=1; i<=n; i++) par[i] = i; } int find(int u) { if(u == par[u]) return u; return par[u] = find(par[u]); } void uni(int a, int b) { a = find(a); b = find(b); if(a == b) return ; if(size[a] < size[b]) swap(a, b); size[a] += size[b]; par[b] = a; } }; signed main() { int n, d; cin >> n >> d; vector<int> dp(n+1, 1); map<int, vector<int> > mp; for(int i=1; i<=n; i++) { int x; cin >> x; mp[x].push_back(i); } union_find dsu(n); vector<int> act(n+1); set<int> st; for(auto [val, vec] : mp) { for(int p : vec) { if(!st.empty() && *st.begin() < p && p - *--st.upper_bound(p) <= d) dsu.uni(p, *--st.upper_bound(p)); if(!st.empty() && *st.rbegin() > p && *st.lower_bound(p) - p <= d) dsu.uni(p, *st.lower_bound(p)); for(int i=1; i<p; i++) if(dsu.find(i) == dsu.find(p)) dp[p] = max(dp[p], dp[i] + 1); } for(int p : vec) { st.insert(p); } } cout << *max_element(dp.begin(), dp.end()) << '\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...