Pagini recente » Cod sursa (job #2530573) | Cod sursa (job #1255632) | Cod sursa (job #3136426) | Cod sursa (job #3132172) | Cod sursa (job #2658532)
#include <bits/stdc++.h>
#define nl '\n'
using namespace std;
ifstream f ( "partitie.in" );
ofstream g ( "partitie.out" );
struct elem
{
int val, index;
};
struct comparare
{
bool operator() ( const elem &a, const elem &b )
{
if ( a.val == b.val )
return a.index < b.index;
return a.val < b.val;
}
};
bool cmp ( elem a, elem b )
{
return a.val < b.val;
}
elem v[300001];
int ans[300001], nrp;
set<elem, comparare>s;
set<elem>::iterator it;
int main()
{
int N, D;
f >> N >> D;
for ( int i = 1; i <= N; i++ )
{
v[i].index = i;
f >> v[i].val;
}
sort ( v + 1, v + N + 1, cmp );
for ( int i = 1; i <= N; i++ )
{
int val = v[i].val - D;
if ( !s.empty() )
it = s.begin();
else
{
nrp = 1;
ans[v[i].index] = 1;
s.insert ( {v[i].val, 1} );
continue;
}
if ( it->val <= v[i].val - D )
{
ans[v[i].index] = it->index;
int nr = it->index;
s.erase ( it );
s.insert ( {v[i].val, nr} );
}
else
{
nrp++;
ans[v[i].index] = nrp;
s.insert ( {v[i].val, nrp} );
}
}
g << nrp << nl;
for ( int i = 1; i <= N; i++ )
g << ans[i] << nl;
return 0;
}