Submission #1322443

#TimeUsernameProblemLanguageResultExecution timeMemory
1322443aaaaaaaaRabbit Carrot (LMIO19_triusis)C++20
0 / 100
34 ms504 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin(), x.end()

int lds(vector<int> x){
	int n = (int) x.size();
	vector<int> ord, seg((n + 5) * 2, 0);
	for(int i = 0; i < n; ++i){
		ord.push_back(x[i]);
	}
	sort(all(ord));
	ord.erase(unique(all(ord)), ord.end());
	auto pos = [&](int x) -> int {
		return lower_bound(all(ord), x) - ord.begin();
	};
	auto update = [&](int idx, int val) -> void {
		idx += n;
		seg[idx] = max(seg[idx], val);
		while(idx > 1){
			idx >>= 1;
			seg[idx] = max(seg[idx << 1], seg[idx << 1 | 1]);
		}
	};
	auto query = [&](int l, int r) -> int {
		if(l > r) return 0;
		l += n, r += n;
		int ans = 0;
		while(l <= r){
			if(l & 1) ans = max(ans, seg[l ++]);
			if(r & 1 ^ 1) ans = max(ans, seg[r --]);
			l >>= 1, r >>= 1;
		}
		return ans;
	};
	for(auto it : x){
		int i = pos(it);
		update(i, query(i, n - 1) + 1);
	}
	return *max_element(all(seg));
}

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(nullptr); cout.tie(nullptr);
	int n, m;
	cin >> n >> m;
	vector<int> ar(n + 1), dp(n + 5, 1);
	for(int i = 1; i <= n; ++i){
		cin >> ar[i];
		ar[i] -= m * i;
	}
	for(int i = 1; i <= n; ++i){
		for(int j = i - 1; j >= 1; --j){
			if(ar[j] >= ar[i]) dp[i] = max(dp[i], dp[j] + 1);
		}
	}
	cout << n - *max_element(all(dp)) << "\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...