Submission #533832

#TimeUsernameProblemLanguageResultExecution timeMemory
533832penguin133Financial Report (JOI21_financial)C++14
100 / 100
580 ms37252 KiB
#include <bits/stdc++.h>
using namespace std;

set<pair<int, int> > s;
set<pair<int, int> > :: iterator it;
pair<int, int> A[300005];
bool cmp(pair<int, int> a, pair<int, int> b){
	if(a.first != b.first)return a.first < b.first;
	else return a.second > b.second;
}
int n,d;
struct node{
	int s,e,m,val, lazy;
	node *l, *r;
	node(int _s, int _e){
		s = _s, e = _e, m = (s + e)/2;
		val = 0;
		if(s != e)l = new node(s, m) , r=  new node(m+ 1, e);
	}
	void update(int p, int v){
		if(s == e)val = v;
		else{
			if(p <= m)l->update(p,v);
			else r->update(p,v);
			val = max(l->val, r->val);
		}
	}
	int query(int a, int b){
		if(s == a && b == e)return val;
		else if(b <= m)return l->query(a,b);
		else if(a > m)return r->query(a,b);
		else return max(l->query(a,m), r->query(m+1, b));
	}
}*root;
int main(){
	cin >> n >> d;
	root= new node(1, n);
	if(d < n - 1)s.insert({1,n});
	s.insert({0,0});
	for(int i=1;i<=n;i++)cin >> A[i].first, A[i].second = i;
	sort(A+1, A+1+n, cmp);
	for(int i=1;i<=n;i++){
		int x = A[i].second;
		it = s.upper_bound({x, 1e9});
		if(it != s.begin()){
			it--;
			if(it->first <= x && it->second >= x){
				int tmp = it->first, tmp2 = it->second;
				s.erase(it);
				if(x-tmp >= d)s.insert({tmp,x-1});
				if(tmp2-x>= d)s.insert({x+1,tmp2});
			}
		}
		int ans =0 ;
		it = s.upper_bound({x, 1e9});
		if(it != s.begin()){
			it--;
			//cout << i << " " << x << " " << it->second<< '\n';
			ans = root->query(it->second + 1, x);
		}
		ans++;
		root->update(x,ans);
		
	}
	cout << root->val;
}
#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...