Cod sursa(job #111919)

Utilizator filipbFilip Cristian Buruiana filipb Data 2 decembrie 2007 15:11:01
Problema Operatii Scor Ascuns
Compilator c Status done
Runda Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define maxim(a, b) ((a > b) ? a : b)
#define NMax 1000005

typedef struct lista { int idd; struct lista *next; } lista;

int N, mx, nr_int = 1;
lista *G[NMax];
char uz[NMax];
long long bst = 0;

void add_to_list(lista **l, int item)
{
    lista *tmp = (lista *)malloc(sizeof(lista));

    tmp->idd = item;
    tmp->next = *l;
    *l = tmp;
}

int main(void)
{
    int i, j, x, sz;
    lista *f;
    
    freopen("operatii.in", "r", stdin);
    freopen("operatii.out", "w", stdout);

    scanf("%d", &N);
    for (i = 1; i <= N; i++)
    {
        scanf("%d", &x);
        add_to_list(&G[x], i);
        mx = maxim(mx, x);
    }

    uz[0] = uz[N+1] = 1;
    for (i = 0; i <= mx; i++)
    {
        for (f = G[i]; f; f = f->next)
        {
            x = f->idd;
            if (!uz[x-1] && !uz[x+1]) nr_int++;
            else if (uz[x-1] && uz[x+1]) nr_int--;
            uz[x] = 1;
        }

        bst += nr_int;
    }
    
    printf("%lld\n", bst);

    return 0;    
}