Pagini recente » Cod sursa (job #573654) | Cod sursa (job #519050) | Cod sursa (job #375337) | Cod sursa (job #1211077) | Cod sursa (job #999960)
Cod sursa(job #999960)
#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< pair<int,int> > v;
void citeste(){
f >> n >> D;
for(int i=1; i<=n; ++i){
int x; f >> x; v.pb( mp(x,i) );
}sort(v.begin(), v.end());
}
void rezolva(){
int j = n-1;
int cntGrupe = 0;
for(int i=0; i<n; ++i){
grupa[v[i].y] = ++cntGrupe;
while( i < j && v[j].x - v[i].x >= D){
grupa[v[j].y] = cntGrupe;
--j;
}
if (i == j) break;
}
g << cntGrupe << "\n";
for(int i=1; i<=n; ++i){
g << grupa[i] << "\n";
}
}
int main(){
citeste();
rezolva();
f.close();
g.close();
return 0;
}