제출 #1224835

#제출 시각아이디문제언어결과실행 시간메모리
1224835radodododoGlobal Warming (CEOI18_glo)C++20
27 / 100
776 ms97476 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <map>

using namespace std;

struct segtree {
	vector<long long> tree;
	long long get_max(long long i, long long l, long long r, long long ql, long long qr) {
		if (qr <= l || r <= ql) {
			return 0;
		}
		if (ql <= l && r <= qr) {
			return tree[i];
		}
		long long mid = (l + r) / 2;
		return max(get_max(2 * i + 1, l, mid, ql, qr), get_max(2 * i + 2, mid, r, ql, qr));
	}
	void sett(long long i, long long l, long long r, long long qi, long long qx) {
		tree[i] = max(tree[i], qx);
		if (l + 1 == r) {
			return;
		}
		long long mid = (l + r) / 2;
		if (qi < mid) {
			sett(2 * i + 1, l, mid, qi, qx);
		} else {
			sett(2 * i + 2, mid, r, qi, qx);
		}
	}
};

int main() {
	long long n, x;
	cin >> n >> x;
	vector<long long> v(n);
	set<long long> s;
	for (long long i = 0; i < n; i++) {
		cin >> v[i];
		s.insert(v[i]);
		s.insert(v[i] + x);
	}
	map<long long, long long> nz, lz;
	long long cnt = 0;
	for (auto ch : s) {
		nz[ch] = cnt;
		lz[cnt] = ch;
		cnt++;
	}
	segtree tr1, tr2;
	tr1.tree.resize(4 * cnt);
	tr2.tree.resize(4 * cnt);
	vector<long long> dp(n);
	for (long long i = 0; i < n; i++) {
		long long ch = nz[v[i]];
		dp[i] = max(dp[i], tr1.get_max(0, 0, cnt, 0, ch) + 1);
		tr1.sett(0, 0, cnt, ch, dp[i]);
		tr2.sett(0, 0, cnt, ch, dp[i]);
		ch = nz[v[i] + x];
		long long newzn = tr2.get_max(0, 0, cnt, 0, ch) + 1;
		tr2.sett(0, 0, cnt, ch, newzn);
	}
	cout << max(tr1.get_max(0, 0, cnt, 0, cnt), tr2.get_max(0, 0, cnt, 0, cnt));
}

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