Cod sursa(job #325076)

Utilizator razvan_emPrecupas Razvan razvan_em Data 18 iunie 2009 20:13:17
Problema Operatii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
using namespace std;
ofstream ofis("operatii.out");
ifstream ifis("operatii.in");
typedef struct nod
{long inf; nod * urm;} * list;
list p[103545];
list q;
long n,i,maxim,v[1004325],uz[1004543];
long long cont,nrint,k;

int main()
{
    ifis>>n;
    for (i=1; i<=n; i++) 
    {ifis>>v[i]; if (v[i]>maxim) maxim=v[i];}
    for (i=1; i<=n; i++)
    {p[v[i]]=new nod; p[v[i]]->inf=-1; p[v[i]]->urm=NULL;}
    for (i=1; i<=n; i++)
    {
        if (p[v[i]]->inf==-1) {p[v[i]]->inf=i; p[v[i]]->urm=NULL;}
        else 
        {while (p[v[i]]->urm!=NULL) p[v[i]]=p[v[i]]->urm;
        q=new nod;
        q->inf=i;
        q->urm=NULL;
        p[v[i]]->urm=q;}
    }
    uz[-1]=1; uz[n+1]=1; 
    for (i=0; i<=maxim-1; i++)
    {
        while (p[i])
        {
              k=p[i]->inf;
              uz[k]=1; 
              if (!uz[k-1] && !uz[k+1]) nrint++;
              else if (uz[k-1] && uz[k+1]) nrint--;
              p[i]=p[i]->urm;
        }
        cont+=nrint;
    }
    ofis<<cont;
    return 0;
}