제출 #906429

#제출 시각아이디문제언어결과실행 시간메모리
906429NonozeGlobal Warming (CEOI18_glo)C++17
100 / 100
46 ms6620 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

int n, x;
vector<int> t;

int bs(int val, vector<int> &LIS) {
	int l=0, r=LIS.size()-1;
	int ans=-1;
	while (l<=r) {
		int mid=l+(r-l)/2;
		if (LIS[mid]>val) {
			l=mid+1;
			ans=mid+1;
		} else {
			r=mid-1;
		}
	}
	return ans;
}

void solve() {
	cin >> n >> x;
	t.resize(n);
	for (auto &u: t) cin >> u;
	vector<int> corr(n, 0);
	vector<int> LIS;
	for (int i=n-1; i>=0; i--) {
		corr[i]=max(0LL, bs(t[i]-x, LIS));
		int lb=bs(t[i], LIS);
		if (lb>=(int)LIS.size() || i==n-1) {
			LIS.push_back(t[i]);
		} else if (lb==-1) {
			LIS[0]=t[i];
		} else {
			LIS[lb]=t[i];
		}
	}


	
	int ans=1;
	LIS.clear();
	for (int i=0; i<n; i++) {
		auto lb=lower_bound(LIS.begin(), LIS.end(), t[i]);
		if (lb==LIS.end()) {
			LIS.push_back(t[i]);
			ans=max(ans, (int)LIS.size()+corr[i]);
		} else {
			LIS[lb-LIS.begin()]=t[i];
			ans=max(ans, (int)(lb-LIS.begin()+1)+corr[i]);
		}
	}
	cout << ans << endl;
	return;
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	solve();
	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...
#Verdict Execution timeMemoryGrader output
Fetching results...