Pagini recente » Cod sursa (job #2803731) | Cod sursa (job #386933) | Cod sursa (job #179112) | Cod sursa (job #3151760) | Cod sursa (job #999987)
Cod sursa(job #999987)
#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 (1<<29)
int n, D, grupa[nmax];
set< pair<int,int> > S;
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(){
for(int i=0; i<n; ++i){
if (S.sz() == 0){
grupa[ v[i].y ] = 1;
S.insert( mp(v[i].x, v[i].y) );
continue;
}
if ( v[i].x - (*S.begin()).x >= D ){
grupa[v[i].y] = grupa[ (*S.begin()).y ];
S.erase(S.begin());
S.insert( mp( v[i].x, v[i].y ) );
}else {
S.insert( mp( v[i].x, v[i].y ) );
grupa[ v[i].y ] = (int)S.sz();
}
}
g << (int)S.sz() << "\n";
for(int i=1; i<=n; ++i){
g << grupa[i] << "\n";
}
}
int main(){
citeste();
rezolva();
f.close();
g.close();
return 0;
}