Submission #253182

#TimeUsernameProblemLanguageResultExecution timeMemory
253182BertedRabbit Carrot (LMIO19_triusis)C++14
100 / 100
147 ms4644 KiB
#include <iostream>
#include <algorithm>
#define pii pair<int, int>
#define fst first
#define snd second
using namespace std;

const int INF = 2e6;

int n, m;
pii ar[200001] = {};
int fwk[200002] = {};

inline void upd(int x, int v)
{
	for (; x <= n + 1; x += x & (-x)) {fwk[x] = max(fwk[x], v);}
}

inline int qry(int x)
{
	int ret = -INF;
	for (; x; x -= x & (-x)) {ret = max(ret, fwk[x]);}
	return ret;
}

int main()
{
	cin >> n >> m;
	ar[0] = {-n * m, 1};
	for (int i = 1; i <= n; i++)
	{
		cin >> ar[i].fst;
		ar[i].fst += (n - i) * m;
		ar[i].fst = -ar[i].fst;
		ar[i].snd = i + 1;
	}
	sort(ar, ar + n + 1);
	for (int i = 1; i <= n + 1; i++) {fwk[i] = -INF;}
	int i, mx = 1;
	for (i = 0; i <= n && ar[i].snd > 1; i++);
	upd(1, 1);
	for (i++; i <= n; i++)
	{
		int ret = qry(ar[i].snd - 1) + 1;
		mx = max(mx, ret);
		upd(ar[i].snd, ret);
	}
	cout << n + 1 - mx << "\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...