Pagini recente » Cod sursa (job #1708209) | Cod sursa (job #202713) | Cod sursa (job #1039520) | Cod sursa (job #951174) | Cod sursa (job #374980)
Cod sursa(job #374980)
# include <fstream>
# include <algorithm>
using namespace std;
int n, d, v[300003], h[300003], nh, poz[300003], p[300003];
bool mai_mic(int i, int j)
{
if (v[i]<=v[j])return 1;
return 0;
}
void cerne (int k)
{
int i, eh=0;
while (!eh && 2*k<=nh)
{
i=2*k;
if (i+1<=nh && h[i+1]<h[i])
i=i+1;
if (h[k]<=h[i])
eh=1;
else
{
int a;
a=h[k], h[k]=h[i], h[i]=a;
a=p[k], p[k]=p[i], p[i]=a;
k=i;
}
}
}
void promoveaza (int k)
{
int eh=0;
while (!eh && k/2)
if (h[k/2]<=h[k])
eh=1;
else
{
int a;
a=h[k], h[k]=h[k/2], h[k/2]=a;
a=p[k], p[k]=p[k/2], p[k/2]=a;
k=k/2;
}
}
int main ()
{
int i;
ifstream fin ("partitie.in");
ofstream fout ("partitie.out");
fin>>n>>d;
for (i=1;i<=n;i++)
fin>>v[i], poz[i]=i;
sort(poz+1, poz+n+1, mai_mic);
h[++nh]=v[poz[1]];
p[nh]=nh;
v[poz[1]]=nh;
for (i=2;i<=n;i++)
if (v[poz[i]]-h[1]>=d)
{
h[1]=v[poz[i]];
v[poz[i]]=p[1];
cerne(1);
}
else
{
h[++nh]=v[poz[i]];
p[nh]=nh;
v[poz[i]]=nh;
promoveaza(nh);
}
fout<<nh<<endl;
for (i=1;i<=n;i++)
fout<<v[i]<<endl;
return 0;
}