Cod sursa(job #2929005)

Utilizator ulkevinsam kevin ulkevin Data 24 octombrie 2022 13:53:49
Problema Partitie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>
#include <algorithm>
#define N 300000

struct elem { int val, poz; };

int multime[N];
struct elem v[N];
int n;

int main() {
    FILE *fin, *fout;
    int d;

    fin = fopen( "partitie.in", "r" );
    fscanf( fin, "%d%d", &n, &d );
    for ( int i = 0; i < n; i ++ ) {
        fscanf( fin, "%d", &v[i].val );
        v[i].poz = i;
    }
    fclose( fin );

    std::sort( v, v + n, [](struct elem a, struct elem b) { return a.val < b.val; } );

    int p = 1, mult = 1;
    for ( int i = 0; i < n; i ++ ) {
        if ( !multime[v[i].poz] )
            multime[v[i].poz] = mult ++;
        while ( p < n && ( multime[v[p].poz] || v[p].val - v[i].val < d ) )
            p ++;
        if ( p < n )
            multime[v[p ++].poz] = multime[v[i].poz];
    }

    fout = fopen( "partitie.out", "w" );
    fprintf( fout, "%d\n", mult - 1 );
    for ( int i = 0; i < n; i ++ )
        fprintf( fout, "%d\n", multime[i] );
    fclose( fout );
    return 0;
}