Submission #961072

#TimeUsernameProblemLanguageResultExecution timeMemory
961072BF001Global Warming (CEOI18_glo)C++17
100 / 100
53 ms4700 KiB
#include <bits/stdc++.h>
using namespace std;

#define N 200005

int n, a[N], cnt, lf[N], val[N], x;

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
        
   	cin >> n >> x;
   	for (int i = 1; i <= n; i++) cin >> a[i];

   	for (int i = 1; i <= n; i++){
   		int l = 1, r = cnt, rt = 0;
   		while (l <= r){
   			int mid = (l + r) >> 1;
   			if (val[mid] < a[i]){
   				rt = mid;
   				l = mid + 1;
   			}
   			else r = mid - 1;
   		}
   		if (rt == cnt) cnt++;
   		val[rt + 1] = a[i];
   		lf[i] = rt + 1;
   	}

   	cnt = 0;
   	int res = 0;
   	for (int i = n; i >= 1; i--){
   		int l = 1, r = cnt, rt = 0;
   		while (l <= r){
   			int mid = (l + r) >> 1;
   			if (a[i] - x < val[mid]){
   				rt = mid;
   				l = mid + 1;
   			}
   			else r = mid - 1;
   		}
   		res = max(res, lf[i] + rt);
   		l = 1, r = cnt, rt = 0;
   		while (l <= r){
   			int mid = (l + r) >> 1;
   			if (a[i] < val[mid]){
   				l = mid + 1;
   				rt = mid;
   			}
   			else r = mid - 1;
   		}
   		if (rt == cnt) cnt++;
   		val[rt + 1] = a[i];
   	}

   	cout << res;

    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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...