제출 #1059468

#제출 시각아이디문제언어결과실행 시간메모리
1059468sssamuiGlobal Warming (CEOI18_glo)C++17
42 / 100
39 ms7132 KiB
#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n, x;
	cin >> n >> x;
	vector<int> t(n);
	for (int i = 0; i < n; i++) cin >> t[i];

	vector<pair<int, int>> pref(n);
	vector<int> lis(0);
	for (int i = 0; i < n; i++)
	{
		if (lis.empty() || (t[i] > lis.back())) pref[i].second = lis.size() + 1;
		else
		{
			int l = 0, r = lis.size() - 1;
			while (l < r)
			{
				int m = l + (r - l) / 2;
				if (lis[m] < t[i]) l = m + 1;
				else r = m;
			}

			pref[i].second = l + 1;
		}

		t[i] -= x;
		if (lis.empty() || (t[i] > lis.back()))
		{
			pref[i].first = lis.size() + 1;
			lis.push_back(t[i]);
		}

		else
		{
			int l = 0, r = lis.size() - 1;
			while (l < r)
			{
				int m = l + (r - l) / 2;
				if (lis[m] < t[i]) l = m + 1;
				else r = m;
			}
			
			pref[i].first = l + 1;
			lis[l] = t[i];
		}
	}

	vector<pair<int, int>> sfx(n);
	vector<int> lds(0);
	for (int i = n - 1; i > -1; i--)
	{
		if (lds.empty() || (t[i] < lds.back())) sfx[i].second = lds.size() + 1;
		else
		{
			int l = 0, r = lds.size() - 1;
			while (l < r)
			{
				int m = l + (r - l) / 2;
				if (lds[m] > t[i]) l = m + 1;
				else r = m;
			}

			sfx[i].second = l + 1;
		}

		t[i] += x;
		if (lds.empty() || (t[i] < lds.back()))
		{
			sfx[i].first = lds.size() + 1;
			lds.push_back(t[i]);
		}

		else
		{
			int l = 0, r = lds.size() - 1;
			while (l < r)
			{
				int m = l + (r - l) / 2;
				if (lds[m] > t[i]) l = m + 1;
				else r = m;
			}

			sfx[i].second = l + 1;
			lds[l] = t[i];
		}
	}

	int ans = 2;
	for (int i = 0; i < n; i++) ans = fmax(ans, pref[i].first + sfx[i].second);
	for (int i = 0; i < n; i++) ans = fmax(ans, pref[i].second + sfx[i].first);
	ans--;
	cout << ans;
}
#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...