program investiciniu_cekiu_ aukcionas;
  { 43 u‘davinys }
  const MAX_KAINA = 500;   { maksimali kaina, padauginta iž 100 }

  type lentele = array [1..MAX_KAINA] of record
                                              perk, pard: longint;
                                            end;

  procedure prad_duom_skaitymas (var cekiai: lentele);
     var f: text;
         c: char; { 'A' - pardav‚jas, 'B' - pirk‚jas }
         r: real; { ‡eki— kaina }
         i, kaina, kiek: longint;
  begin
    for i := 1 to MAX_KAINA do
      begin
        cekiai[i].pard := 0; { dar neradome pirk‚j— norin‡i— pirkti }
        cekiai[i].perk := 0; { ar parduoti ‡ekius u‘ kain… i }
      end;
    assign (f, 'AUKCION.DAT');
    reset (f);
    readln (f, c, kiek, r);
    repeat
      kaina := round (r * 100);
      if c = 'A'
         then cekiai[kaina].pard := cekiai[kaina].pard + kiek
         else cekiai[kaina].perk := cekiai[kaina].perk + kiek;
      readln (f, c, kiek, r);
    until C = 'Z';
    close (f)
  end; { prad_duom_skaitymas }

  function min (x, y: longint): longint;
  { randa ma‘esnj iž dviej— skai‡i— }
  begin
    if x <= y
       then min := x
       else min := y;
  end; { min }

  procedure aukcionas (cekiai: lentele; { ‡eki— kainos }
                       var kaina: real; { nustatyta vieno ‡ekio kaina }
                       var kiekis: longint { parduot— ‡eki— kiekis });
    var cekio_kaina, i, perka, parduoda: longint;
  begin
    { rasime perkam— u‘ MAX_KAIN ‡eki— kiek }
    perka := cekiai[MAX_KAINA].perk;
    { rasime parduodam— u‘ MAX_KAIN ‡eki— kiek }
    parduoda := 0;
    for i := 1 to MAX_KAINA do
      parduoda := parduoda + cekiai[i].pard;
    { tok kiek galima parduoti u‘ MAX_KAIN }
    kiekis := min (parduoda, perka);
    cekio_kaina := MAX_KAINA;
    for i := MAX_KAINA - 1 downto 1 do
      { kain… nuleidin‚sime }
      begin
        perka := perka + cekiai[i].perk;
        parduoda := parduoda - cekiai[i].pard;
        if kiekis < min (perka, parduoda)
           then begin
                  kiekis := min (perka, parduoda);
                  cekio_kaina := i;
                end;
      end;
    kaina := cekio_kaina/100;
  end; { aukcionas }

  procedure histograma (cekiai: lentele);
  { histogramos piežimas }

   const  EILUT = 19;    { histogramos parametrai }
          STULP = 50;

     var  vi, ap,           { kain— intervalas, kuriame galima prekyba }
          koef1, koef2,      { masteli— koeficientai }
          kiek_pa, kiek_pe, { kiek parduos ir kiek pirks ‡eki— }
          min_k, max_k,     { minimali ir maksimali kainos }
          par, per,       { parduodam— ir perkam— ‡eki— kiekiai }
          i, j: longint;
          max: longint;
  begin
    { viržutin‚ eilut‚ }
    writeln;
    write   ('  KAINA:    KIEKIS ');
    write   ('(''+'' pasi–la; ''-'' paklausa)');
    writeln ('                PASI¦LA  PAKLAUSA');
    { apskai‡iuosime pasi–lym— viržutin ir apatin r‚‘ius }
     ap := 1;
     while (cekiai[ap].pard = 0) and (cekiai[ap].perk = 0) do
       ap := ap + 1;
     vi := MAX_KAINA;
     while (cekiai[vi].pard = 0) and (cekiai[vi].perk = 0) do
       vi := vi - 1;
     { apskai‡iuojamas kain— mastelis koef1 }
     koef1 := (vi - ap + 1) div EILUT;
     { jei kain— skirtumas ma‘esnis u‘ ekrano eilu‡i— skai‡i— }
     if koef1 = 0 then koef1 := 1;
     { apskai‡iuojamas ‡eki— kiekio m…stelis koef2 }
     max := 0;
     for j := 0 to EILUT-1 do
       begin
          { kain— ribos, kur… atitinka eilut‚ j }
          min_k := ap + j * koef1;
          max_k := ap + (j+1) * koef1 - 1;
          {jei eilut‚ paskutin‚ - pridedame neižsidalinus likut}
          if j = EILUT-1 then max_k := vi;
          { rasime ‡eki— skai‡i— kiekviename kain— intervale }
          { iž j— ižrinksime did‘iausi… ‡eki— kiek }
          kiek_pa := 0; kiek_pe := 0;
          for i := min_k to max_k do
            begin
              kiek_pa := kiek_pa + cekiai[i].pard;
              kiek_pe := kiek_pe + cekiai[i].perk;
            end;
          if kiek_pa > max then max := kiek_pa;
          if kiek_pe > max then max := kiek_pe
       end;
     koef2 := max div STULP;
     if koef2 = 0 then koef2 := 1;

     { brai‘ome histogram… }
     for j := 0 to EILUT-1 do
       begin
         { kain— ribos, kur… atitinka eilut‚ j }
         min_k := ap + j * koef1;
         max_k := ap + (j+1) * koef1 - 1;
         { jei eilut‚ paskutin‚ - pridedame neižsidalinus likut }
         if j = EILUT - 1 then max_k := vi;
         { spausdiname kain— ribas }
         write (min_k/100: 4: 2, '-', max_k/100: 4: 2, ': ');
         { apskai‡iuojame perkan‡i—j— ir parduodan‡i—j— skai‡i— }
         kiek_pa := 0; kiek_pe := 0;
         for i := min_k to max_k do
           begin
             kiek_pa := kiek_pa + cekiai[i].pard;
             kiek_pe := kiek_pe + cekiai[i].perk;
           end;
         { perkam— ir parduodam— ‡eki— kiekius perskai‡iuojame }
         { pagal mastel }
         if (kiek_pa > 0) and (kiek_pa div koef2 = 0)
            then par := 1
            else par := kiek_pa div koef2;
         if (kiek_pe > 0) and (kiek_pe div koef2 = 0)
            then per := 1
            else per := kiek_pe div koef2;
         { vaizduosime ‡eki— pirkim… ir pardavim… }
         if per >= par then { jei perka daugiau negu parduoda...}
           begin
              { rodome parduodan‡i—j— ir perkan‡i—j— skai‡i— (ñññññ) }
              for i := 1 to par do
                write ('ñ');
              { rodome perkan‡i—j— skai‡i—    (__) }
              for i := par+1 to per do
                write ('-');
              { ekrane matome                 (ñññññ__) }
              write ('': STULP-per)
           end
         else  { jei perka ma‘iau negu parduoda }
           begin
              { rodome parduodan‡i—j— ir perkan‡i—j— skai‡i— (ñññññ) }
              for i := 1 to per do
                write ('ñ');
              { rodome parduodan‡i—j— skai‡i— (++++) }
              for i := per+1 to par do
                write ('+');
              { ekrane matome                 (ñññññ++++) }
              write('': STULP-par)
           end;
         { ir u‘ražome tikslius skai‡ius }
         write (kiek_pa: 8, kiek_pe: 8);
         writeln
       end;
     { skai‡iuosime kiek iž viso perkama ir parduodama ‡eki— }
     kiek_pa := 0; kiek_pe := 0;
     for i := ap to vi do  { susumuojame }
       begin
         kiek_pa := kiek_pa + cekiai[i].pard;
         kiek_pe := kiek_pe + cekiai[i].perk;
       end;
     write ('ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ');
     write ('ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ');
     writeln('IŸ VISO:', '':STULP+3, kiek_pa: 8, kiek_pe: 8)
  end; { histograma }

  var n: longint;
      cekiai: lentele;
      kaina: real;
      kiekis: longint;
begin
  prad_duom_skaitymas (cekiai);
  histograma (cekiai);
  aukcionas (cekiai, kaina, kiekis);
  write ('U’ ', kaina: 0: 2, ' LT. KAIN BUS PARDU0TA ', kiekis, ' €EKI§');
end.

