Submission #1289398

#TimeUsernameProblemLanguageResultExecution timeMemory
1289398packmaniA Huge Tower (CEOI10_tower)C++20
100 / 100
226 ms10140 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
const ll N=1e6+5;
const ll mod=1e9+9;
ll n,d,p,tmp;
ll arr[N];
ll mul[N];
ll ans;
int32_t main()
{
	cin >> n >> d;
	for(int i=0;i<n;i++)
	{
		cin >> arr[i];
	}
	//a,b,c -> a<=b+d, b<=c+d
	//sort asc -> we want to put b, a<=b+d always true (assume d is positive) -> check only b<=c+d
	sort(arr,arr+n);
	p=n-1;
	for(int i=n-1;i>=0;i--)
	{
		while(p>=0 and arr[i]<=arr[p]+d) p--;
		mul[i]=i-p-1;
	}
	ans=1;
	for(int i=0;i<n;i++)
	{
		tmp = ans;
		ans = tmp*mul[i];
		ans %= mod;
		ans += tmp;
		ans %= mod;
	}
	cout << ans;
}
#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...
#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...
#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...