Submission #258562

#TimeUsernameProblemLanguageResultExecution timeMemory
258562BertedGlobal Warming (CEOI18_glo)C++14
100 / 100
233 ms5616 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#define pii pair<int, int>
#define ppi pair<pii, int>
#define fst first
#define snd second
using namespace std;

int n, x, ar[200001];
vector<int> coord;
int fwk[2][200001] = {};

inline void upd(int t, int x, int v)
{
	x = prev(upper_bound(coord.begin(), coord.end(), x)) - coord.begin();
	for (; x < coord.size(); x += x & (-x)) {fwk[t][x] = max(fwk[t][x], v);}
}

inline int qry(int t, int x)
{
	int ret = 0;
	x = prev(upper_bound(coord.begin(), coord.end(), x)) - coord.begin();
	for (; x; x -= x & (-x)) {ret = max(ret, fwk[t][x]);}
	return ret;
}

int main()
{
	ios :: sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> n >> x;
	coord.push_back(0);
	for (int i = 0; i < n; i++)
	{
		cin >> ar[i];
		coord.push_back(ar[i]);
	}
	sort(coord.begin(), coord.end());
	coord.resize(unique(coord.begin(), coord.end()) - coord.begin());
	int res = 0;
	for (int i = 0; i < n; i++)
	{
		int ret = qry(0, ar[i] + x - 1) + 1;
		upd(1, ar[i], ret);
		res = max(ret, res);

		ret = qry(0, ar[i] - 1) + 1;
		upd(0, ar[i], ret);
		res = max(ret, res);
		
		ret = qry(1, ar[i] - 1) + 1;
		upd(1, ar[i], ret);
		res = max(ret, res);
	}
	cout << res << "\n";
	return 0;
}

Compilation message (stderr)

glo.cpp: In function 'void upd(int, int, int)':
glo.cpp:18:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (; x < coord.size(); x += x & (-x)) {fwk[t][x] = max(fwk[t][x], v);}
         ~~^~~~~~~~~~~~~~
#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...