Pagini recente » Cod sursa (job #1838883) | Cod sursa (job #2274979) | Borderou de evaluare (job #1036669) | Cod sursa (job #333553) | Cod sursa (job #998216)
Cod sursa(job #998216)
#include <fstream>
#include <algorithm>
using namespace std;
int n,d,maxim;
struct sol
{
int val,poz,nr;
};
sol v[300010];
inline bool Cmp1(const sol A, const sol B)
{
return A.val<B.val;
}
inline bool Cmp2(const sol A, const sol B)
{
return A.poz<B.poz;
}
inline void Read()
{
int i;
ifstream fin("partitie.in");
fin>>n>>d;
for(i=1;i<=n;i++)
{
fin>>v[i].val;
v[i].poz=i;
}
fin.close();
}
inline void Solve()
{
int i,j,numar;
sort(v+1,v+n+1,Cmp1);
j=1;v[n+1].val=2000000000;
for(i=1;i<=n;i++)
{
while(v[j].val-v[i].val<d)
j++;
j--;
maxim=max(maxim,j-i+1);
}
numar=1;
for(i=1;i<=n;i++)
{
v[i].nr=numar;
numar++;
if(numar>maxim)
numar=1;
}
}
inline void Afisare()
{
int i;
ofstream fout("partitie.out");
fout<<maxim<<"\n";
sort(v,v+n+1,Cmp2);
for(i=1;i<=n;i++)
fout<<v[i].nr<<"\n";
fout.close();
}
int main()
{
Read();
Solve();
Afisare();
return 0;
}