Cod sursa(job #108703)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 23 noiembrie 2007 17:40:42
Problema Zeap Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <fstream.h>
#define MAXL 1000000002
ofstream fout("zeap.out");
long a[300009],n,max,min,pozmax,pozmin,nr,numar;
char sir[30];
void inserare(long x){
a[n++]=x;
nr++;
}

void stergere(long x){
long i;
for (i=0;i<n;i++)
   if (a[i]==x){
      a[i]=MAXL;
      break;
   }
if (i==n)
   fout<<"-1\n";
else
  nr--;
}

void caut(long x){
long i;
for (i=0;i<n;i++)
   if (a[i]==x){
      fout<<"1\n";
      break;}
if (i==n)
   fout<<"0\n";
}

void maxim(){
for (long i=0;i<n;i++)
   if (a[i]!=MAXL)
     if (a[i]>max){
	max=a[i];
	pozmax=i;}
}

void minim(){
for (long i=0;i<n;i++)
   if (a[i]!=MAXL)
      if (a[i]<min){
	 min=a[i];
	 pozmin=i;}
}

void max_x(){
if (nr<2)
   fout<<"-1\n";
else{
if (a[pozmax]==MAXL) {
  max=-2000000000;
  maxim();  }

if (a[pozmin]==MAXL) {
    min=MAXL;
    minim();
    }
   fout<<max-min<<"\n";
}
}

void min_x(){
if (nr<2)
   fout<<"-1\n";
else {
long mini=1000000001;
for (long i=0;i<n-1;i++)
   if (a[i]!=MAXL)
     for (long j=i+1;j<n;j++)
	if (a[j]!=MAXL)
	   if (fabs(a[j]-a[i])<mini)
	      mini=fabs(a[j]-a[i]);
fout<<mini<<"\n";
}
}
void formare(int e){
for (int i=e;i<strlen(sir)-1;i++)
    numar=numar*10+sir[i]-'0';
}

void citire(){
freopen ("zeap.in","r",stdin);
while (!feof(stdin)){
fgets(sir,20,stdin);
numar=0;
if (sir[0]=='I'){
   formare(2);
   inserare(numar);}
else
    if (sir[0]=='S'){
       formare(2);
       stergere(numar);}
    else
      if (sir[0]=='C'){
	 formare(2);
	 caut(numar);}
      else
	if (sir[1]=='A')
	   max_x();
	else
	  min_x();

}
fclose(stdin);
}

int main(){
a[3000001]=MAXL;
max=MAXL;
min=MAXL;
pozmax=3000001;
pozmin=3000001;
n=0;
citire();
fout.close();
return 0;
}