Pagini recente » Cod sursa (job #1272531) | Cod sursa (job #1567276) | Monitorul de evaluare | Cod sursa (job #1919631) | Cod sursa (job #999952)
Cod sursa(job #999952)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <set>
#include <queue>
#include <deque>
using namespace std;
ifstream f("partitie.in");
ofstream g("partitie.out");
#define ll long long
#define pb push_back
#define mp make_pair
#define sz size
#define x first
#define y second
#define nmax 300006
#define inf
int n, D, grupa[nmax];
vector<int> v;
void citeste(){
f >> n >> D;
for(int i=1; i<=n; ++i){
int x; f >> x; v.pb(x);
}sort(v.begin(), v.end());
}
void rezolva(){
int j = n-1;
int cntGrupe = 0;
for(int i=0; i<n; ++i){
grupa[i] = ++cntGrupe;
while( i < j && v[j] - v[i] >= D){
grupa[j] = cntGrupe;
--j;
}
if (i == j) break;
}
g << cntGrupe << "\n";
for(int i=0; i<n; ++i){
g << grupa[i] << "\n";
}
}
int main(){
citeste();
rezolva();
f.close();
g.close();
return 0;
}