Submission #864176

#TimeUsernameProblemLanguageResultExecution timeMemory
864176vjudge1Financial Report (JOI21_financial)C++17
48 / 100
179 ms198052 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair typedef long long ll; typedef pair<long long, long long> pll; typedef pair<int,int> pii; typedef vector<long long> vl; typedef vector<int> vi; int n, d; vi arr; int cnt[7100], can_jump[7100][7100]; struct segtree{ vi tree; void init(int sz){ tree.resize(4 * sz, 0); } void build(int node, int l, int r){ if(l == r){ tree[node] = cnt[l]; } else{ int mid = (l + r) / 2; build(node*2, l, mid); build(node*2+1, mid+1, r); tree[node] = max(tree[node*2], tree[node*2+1]); } } int query(int node, int l, int r, int L, int R) { if(r < L || l > R) return 0; if(L <= l && r <= R) return tree[node]; int mid = (l + r) / 2; return max(query(node*2, l, mid, L, R), query(node*2+1, mid+1, r, L, R)); } }; int main(){ cin>>n>>d; for(int i = 1; i <= n; i++){ cin>>cnt[i]; arr.pb(cnt[i]); } if(d == n){ vi rez; for(int i = 1; i <= n; i++){ auto ite = lower_bound(rez.begin(), rez.end(), cnt[i]); if(ite == rez.end()){ rez.push_back(cnt[i]); } else{ *ite = cnt[i]; } } cout<<rez.size()<<endl; return 0; } sort(arr.begin(), arr.end()); memset(can_jump, 0, sizeof can_jump); arr.erase(unique(arr.begin(), arr.end()), arr.end()); for(int i = 1; i <= n; i++) cnt[i] = lower_bound(arr.begin(), arr.end(), cnt[i]) - arr.begin() + 1; for(int i = 1; i <= n; i++){ int last = i; for(int j = i +1; j <= n; j++){ if(j - last <= d && cnt[i] < cnt[j]) can_jump[i][j] = 1; if(j - last <= d && cnt[i] >= cnt[j]) last = j; } } int dp[n+1]; for(int i = 1; i <= n; i++){ dp[i] = 1; for(int j = 1; j < i; j++){ if(!can_jump[j][i]) continue; dp[i] = max(dp[i], dp[j] + 1); } } int ans = 0; for(int i = 1; i <= n; i++) ans = max(ans, dp[i]); cout<<ans<<endl; 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...