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...