Pagini recente » Cod sursa (job #572868) | Borderou de evaluare (job #156721) | Cod sursa (job #2290334) | Cod sursa (job #2018781) | Cod sursa (job #1235485)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct
{
int number;
int position;
//int m;
} nppair;
typedef struct
{
void* n;
void* p;
int l;
int no;
} ring;
inline bool cmp(nppair a, nppair b) { return (a.number<b.number); }
int main()
{
int i, l, d;
int a, ki, kpi;
ifstream fin("partitie.in");
fin>>l;
fin>>d;
nppair* kin = new nppair[l];
for(i=0; i<l; i++)
{
fin>>a;
kin[i].number = a;
kin[i].position = i;
}
vector<nppair> vn (kin, kin+l);
delete[] kin;
sort(vn.begin(), vn.end(), cmp);
ring* r, *p;
ki=1;
p = new ring[1]; p->n = p; p->p = p; p->l = vn[0].number; p->no = ki; ki++;
r = p;
int* kon = new int[l];
kon[vn[0].position] = r->no;
for(i=1; i<l; i++)
{
if(vn[i].number >= r->l+d)
{
kon[vn[i].position] = r->no;
r->l = vn[i].number;
r = (ring*)r->n;
}
else
{
p = new ring[1];
p->no = ki; ki++; p->l = vn[i].number;
kon[vn[i].position] = p->no;
ring* pc = (ring*)r->p;
pc->n = p; r->p = p;
p->p = pc; p->n = r;
}
}
ofstream fout("partitie.out");
fout<<ki-1<<"\n";
for(i=0; i<l; i++) fout<<kon[i]<<"\n";
return 0;
}