Cod sursa(job #117513)

Utilizator marinMari n marin Data 21 decembrie 2007 16:33:48
Problema Operatii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
//#define MAX 101  //1 milion
//#define MAX1 1       //100 mii


struct nod{
  long int inf;
  nod *adr;
};

nod *v[100001];
nod *q,*r;

long int x,max,intrv,sum=0;
char *uz;

long int n,i,t;

int main(){
  FILE *f = fopen("operatii.in","r");
  fscanf(f,"%ld",&n);
  for (i=1;i<=n;i++)
    v[i]=NULL;

/*  for (i=1;i<=n;i++) {
    fscanf(f,"%ld",&x[i]);
    q = new nod;
    q->inf = i;
    q->adr = v[x[i]];
    v[x[i]]=q;
    if (x[i]>max)
      max = x[i];
  }*/

  for (i=1;i<=n;i++) {
    fscanf(f,"%ld",&x);
    q = new nod;
    q->inf = i;
    q->adr = v[x];
    v[x]=q;
    if (x>max)
      max = x;
  }


  uz = new char[max+2];

  fclose(f);
  uz[0]=1;
  uz[n+1]=1;
  intrv = 1;

  for (i=0;i<=max;i++) {
    q = v[i];
    while (q!=NULL) {
      t = q->inf;
      uz[t]=1;
      if ((uz[t-1]==0)&&(uz[t+1]==0)){
	intrv++;
      } else {
	if ((uz[t-1]!=0)&&(uz[t+1]!=0))
	  intrv--;
	}
      r = q;
      q = q->adr;
      delete r;
    }
    sum+=intrv;
  }
  delete uz;

  FILE *g = fopen("operatii.out","w");
  fprintf(g,"%ld",sum);

  fclose(g);

  return 0;
}