CF990B Micro-World 贪心 第十六

Micro-World
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

You have a Petri dish with bacteria and you are preparing to dive into the harsh micro-world. But, unfortunately, you don't have any microscope nearby, so you can't watch them.

You know that you have nn bacteria in the Petri dish and size of the ii-th bacteria is aiai. Also you know intergalactic positive integer constant KK.

The ii-th bacteria can swallow the jj-th bacteria if and only if ai>ajai>aj and aiaj+Kai≤aj+K. The jj-th bacteria disappear, but the ii-th bacteria doesn't change its size. The bacteria can perform multiple swallows. On each swallow operation any bacteria ii can swallow any bacteria jj if ai>ajai>aj and aiaj+Kai≤aj+K. The swallow operations go one after another.

For example, the sequence of bacteria sizes a=[101,53,42,102,101,55,54]a=[101,53,42,102,101,55,54] and K=1K=1. The one of possible sequences of swallows is: [101,53,42,102,101––,55,54][101,53,42,102,101_,55,54] → [101,53,42,102,55,54][101,53_,42,102,55,54] → [101––,42,102,55,54][101_,42,102,55,54] → [42,102,55,54][42,102,55,54_] → [42,102,55][42,102,55]. In total there are 33 bacteria remained in the Petri dish.

Since you don't have a microscope, you can only guess, what the minimal possible number of bacteria can remain in your Petri dish when you finally will find any microscope.

Input

The first line contains two space separated positive integers nn and KK (1n21051≤n≤2⋅105, 1K1061≤K≤106) — number of bacteria and intergalactic constant KK.

The second line contains nn space separated integers a1,a2,,ana1,a2,…,an (1ai1061≤ai≤106) — sizes of bacteria you have.

Output

Print the only integer — minimal possible number of bacteria can remain.

Examples
input
Copy
7 1
101 53 42 102 101 55 54
output
Copy
3
input
Copy
6 5
20 15 10 15 20 25
output
Copy
1
input
Copy
7 1000000
1 1 1 1 1 1 1
output
Copy
7
Note

The first example is clarified in the problem statement.

In the second example an optimal possible sequence of swallows is: [20,15,10,15,20,25][20,15,10,15,20_,25] → [20,15,10,15,25][20,15,10,15_,25] → [20,15,10,25][20,15,10_,25] → [20,15,25][20,15_,25] → [20,25][20_,25] → [25][25].

In the third example no bacteria can swallow any other bacteria.

题意: 有n个细菌,每个细菌的尺寸为ai,现在有以常数k,如果细菌i的尺寸ai大于细菌j的尺寸aj,并且ai<=aj+k,那么细菌i就可以吃掉细菌j,问最后可以剩于多少个细菌。

先将n个细菌去重排序并且用vis数组记录下每个细菌的个数,然后直接暴力枚举满足a[i]>=a[i-1]&&[i]<=a[i-1]+k的情况,减去满足情况a[i-1]的个数

#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <cstdio>
#include <vector>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#define debug(a) cout << #a << " " << a << endl
using namespace std;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
typedef long long ll;
ll a[maxn], vis[maxn*2], flg[maxn];
int main(){
    std::ios::sync_with_stdio(false);
    ll n, k;
    while( cin >> n >> k ) {
        ll num;
        memset( vis, 0, sizeof(vis) );
        for( ll i = 0; i < n; i ++ ) {
            cin >> a[i];
            vis[a[i]] ++;
        }
        sort( a, a + n );
        ll sum = n, len = unique( a, a + n ) - a;
        for( ll i = 1; i < len; i ++ ) {
            if( a[i] > a[i-1] && a[i] <= a[i-1] + k ) {
                sum -= vis[a[i-1]];
            }
        }
        cout << sum << endl;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/l609929321/p/9229925.html