Submission #444378

#TimeUsernameProblemLanguageResultExecution timeMemory
444378keta_tsimakuridzeGlobal Warming (CEOI18_glo)C++14
100 / 100
1532 ms27364 KiB
#include<bits/stdc++.h>
#define f first
#define s second
#define int long long
using namespace std;
const int N=2e5+5,mod=1e9+7;
int t,tree[4*N],R[N],L[N],a[N],b[N],n,x;
map<int,int> ind;
int getans(int u,int start,int end,int l,int r) {
	if(l>end || r<start) return 0 ;
	if(start<=l && r<=end) return tree[u];
	int mid = (l+r)/2;
	return max(getans(2*u,start,end,l,mid),getans(2*u+1,start,end,mid+1,r));
}
void update(int u,int ind,int l,int r,int val) {
	if(l>ind || r<ind) return;
	if(l==r) {
		tree[u] = val;
		return;
	}
	int mid = (l+r)/2;
	update(2*u,ind,l,mid,val);
	update(2*u+1,ind,mid+1,r,val);
	tree[u] = max(tree[2*u],tree[2*u+1]);
}
 main(){
	cin>>n>>x;
	for(int i=1;i<=n;i++){
		cin >> a[i];
		b[i] = a[i];
	}
	sort(b+1,b+n+1);
	int idx = 0;
	for(int i = 1; i<=n; i++) {
		if(b[i] != b[i-1]) idx++;
		ind[b[i]] = idx;
	}
	for(int i=n;i>=1;i--) {
		R[i] = getans(1,ind[a[i]]+1,n,1,n) + 1;
		update(1,ind[a[i]],1,n,R[i]);
	}
	int ans = 0;
	for(int i=1;i<=4*n;i++) tree[i] = 0;
	for(int i=1;i<=n;i++) {
		L[i] = getans(1,1,ind[a[i]]-1,1,n) + 1;
		int l = 1, r = n,c = 0;
		while(l<=r) {
			int mid = (l+r)/2;
			if(b[mid] < a[i] + x) {
				c = mid;
				l = mid + 1;
			}
			else r = mid - 1;
		}
		c = ind[b[c]];
		ans = max(ans, getans(1,1,c,1,n) + R[i]);
		update(1,ind[a[i]],1,n,L[i]);
	} 
	for(int i=1;i<=4*n;i++) tree[i] = 0;
	ind[0] = n + 1;
	for(int i = n; i>=1; i--) {
		int l = 1, r = n, c= 0;
		while(l<=r) {
			int mid = (l+r)/2;
			if(b[mid] > a[i] - x) {
				r = mid - 1;
				c = mid;
			}
			else l = mid + 1;
		}
		c = ind[b[c]];
		ans = max(ans,getans(1,c,n,1,n) + L[i]);
		update(1,ind[a[i]],1,n,R[i]);
	}
	cout<<ans;

}

Compilation message (stderr)

glo.cpp:26:2: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   26 |  main(){
      |  ^~~~
#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...