Pagini recente » Istoria paginii runda/oni-2009-ix/clasament | Cod sursa (job #1922331) | Cod sursa (job #451018) | Cod sursa (job #436632) | Cod sursa (job #117513)
Cod sursa(job #117513)
#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;
}