Cod sursa(job #1235485)

Utilizator stanescumalinStanescu Malin Octavian stanescumalin Data 29 septembrie 2014 20:56:02
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#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;
}