Pagini recente » Cod sursa (job #2836824) | Cod sursa (job #1771159) | Cod sursa (job #160432) | Cod sursa (job #1357849) | Cod sursa (job #1707121)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream ka("partitie.in");
ofstream ki("partitie.out");
const int N_MAX = 300000;
int n, d, v[N_MAX + 1], sol[N_MAX + 1], init[N_MAX + 1];
int maxim = 1;
int caut(int t)
{
int step = 0;
for(;(1 << step) <= n; step++);
int i = 0;
for(int k = step; k >= 0; k--)
{
if(i + (1 << k) <= n && v[i + (1 << k)] < t)
i += (1 << k);
}
return i + 1;
}
int main()
{
ka >> n >> d;
for(int i = 1; i <= n; i++)
{
ka >> v[i];
init[i] = v[i];
}
sort(v + 1, v + n + 1);
int prev = 1;
int cate = 1;
sol[1] = 1;
for(int i = 2; i <= n; i++)
{
if(v[i] - v[prev] < d)
{
cate++;
if(cate > maxim)
maxim = cate;
}
else
{
cate++;
while(v[i] - v[prev] >= d)
{
prev++;
cate--;
}
}
sol[i] = cate;
}
ki << maxim << '\n';
for(int i = 1; i <= n; i++)
{
int t = caut(init[i]);
ki << sol[t] << '\n';
}
}