Submission #1214117

#TimeUsernameProblemLanguageResultExecution timeMemory
1214117Nika533Global Warming (CEOI18_glo)C++17
100 / 100
320 ms15808 KiB
#pragma GCC diagnostic warning "-std=c++11"
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define s second
#define MOD 1000000007
#define flush fflush(stdout)
#define all(x) (x).begin(),(x).end()
#define allr(x) (x).rbegin(), (x).rend()
#define pii pair<int,int>
using namespace std;
const int N=2e5+5;
int n,m,T,k;

int t[N*4];
void build(int v, int tl, int tr) {
	if (tl==tr) {
		t[v]=0; return;
	}
	int mid=(tl+tr)/2;
	build(v*2,tl,mid); build(v*2+1,mid+1,tr);
	t[v]=0;
}
void update(int v, int tl, int tr, int ind, int val) {
	if (tl==tr) {
		t[v]=val; return;
	}
	int mid=(tl+tr)/2;
	if (ind<=mid) update(v*2,tl,mid,ind,val); 
	else update(v*2+1,mid+1,tr,ind,val);
	t[v]=max(t[v*2],t[v*2+1]);
}
int query(int v, int tl, int tr, int l, int r) {
	if (l>r) return 0;
	if (tl==l && tr==r) return t[v];
	int mid=(tl+tr)/2;
	return max(query(v*2,tl,mid,l,min(r,mid)),query(v*2+1,mid+1,tr,max(l,mid+1),r));
}

void test_case() {
	cin>>n>>k;
	int arr[n+1],a[n+1],b[n+1]; map<int,int> mymap;
	vector<int> prefdp(n+1,0),sufdp(n+2,0);
	for (int i=1; i<=n; i++) {
		cin>>arr[i];
	}
	for (int i=1; i<=n; i++) {
		a[i]=arr[i];
	}
	sort(a+1,a+1+n);
	for (int i=1; i<=n; i++) {
		mymap[a[i]]=i;
	}
	for (int i=1; i<=n; i++) {
		b[i]=mymap[arr[i]];
	}
	build(1,1,n);
	for (int i=1; i<=n; i++) {
		prefdp[i]=query(1,1,n,1,b[i]-1)+1;
		update(1,1,n,b[i],prefdp[i]);
	}
	build(1,1,n);
	for (int i=n; i>=1; i--) {
		sufdp[i]=query(1,1,n,b[i]+1,n)+1;
		update(1,1,n,b[i],sufdp[i]);
	}
	int ans=0;
	for (int i=1; i<=n; i++) {
		ans=max(ans,prefdp[i]);
	}
	build(1,1,n);
	for (int i=1; i<=n; i++) {
		int l=1,r=n,ind=0;
		while (l<=r) {
			int mid=(l+r)/2;
			if (a[mid]-k<a[b[i]]) {
				l=mid+1; ind=mid;
			}
			else{
				r=mid-1;
			}
		}
//		cout<<i<<" "<<ind<<endl;
		ans=max(ans,sufdp[i]+query(1,1,n,1,ind));
		update(1,1,n,b[i],prefdp[i]);
	}
	cout<<ans<<endl;
}
int main () {
	ios :: sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	T=1; 
	while (T--) test_case();
}

Compilation message (stderr)

glo.cpp:1:32: warning: '-std=c++11' is not an option that controls warnings [-Wpragmas]
    1 | #pragma GCC diagnostic warning "-std=c++11"
      |                                ^~~~~~~~~~~~
#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...