Submission #536256

#TimeUsernameProblemLanguageResultExecution timeMemory
536256getacFinancial Report (JOI21_financial)C++14
100 / 100
470 ms23848 KiB
//InTheNameOfGOD
//PRS;)
#pragma GCC optimize("O3,no-stack-protector,unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2")
#include<bits/stdc++.h>
#define rep(i, l, r) for(ll i = ll(l); i < ll(r); ++i)
#define per(i, l, r) for(ll i = ll(r) - 1; i >= ll(l); --i)
#define Fast cin.tie(0) -> sync_with_stdio(0);
#define X first
#define Y second
typedef long long ll;
using namespace std;
typedef pair<int, int> pi;
constexpr int xn = 3e5 + 5;
int a[xn], ans, sz = 1;
vector<int> v1;
inline int get(int l, int r)
{
	int ret = 0;
	l += sz, r += sz + 1;
	while(l < r)
	{
		if(l & 1) ret = max(ret, v1[l++]);
		if(r & 1) ret = max(ret, v1[--r]);
		l >>= 1, r >>= 1;
	}
	return ret;
}
inline void upd(int p, int v)
{
	ans = max(ans, v), v1[p += sz] = v, p >>= 1;
	while(p) v1[p] = max(v1[p << 1 | 0], v1[p << 1 | 1]), p >>= 1;
}
int main()
{
	Fast
	int n, d;
	cin >> n >> d;
	rep(i, 0, n) cin >> a[i];
	vector<int> v2;
	rep(i, 0, n) v2.push_back(a[i]);
	v2.push_back(-1), sort(v2.begin(), v2.end()), v2.erase(unique(v2.begin(), v2.end()), v2.end());
	rep(i, 0, n) a[i] = lower_bound(v2.begin(), v2.end(), a[i]) - v2.begin();
	int prs = v2.size();
	while(sz < prs) sz <<= 1;
	int t = sz << 1;
	while(t--) v1.push_back(0);
	set<pi> s1, s2;
	rep(i, 0, n)
	{
		upd(a[i], max(get(0, a[i] - 1) + 1, get(a[i], a[i]))), s1.insert({a[i], i});
		if(i < d) continue;
        s1.erase({a[i - d], i - d}), s2.insert({a[i - d], i - d});
        while(!s2.empty() && s2.begin() -> X < s1.begin() -> X)
			upd(s2.begin() -> X, 0), s2.erase(s2.begin());
	}
	cout << ans << '\n';
}
#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...