|
|
вернуться в форумWhy compilation error? Please help me ! Here is my program : const max = 15000; var a,pos,cs :array[0..max] of word; n,m :word; x :longint; procedure doi(u,v :word); var tam :word; begin tam := a[u]; a[u] := a[v]; a[v] := tam; pos[ cs[u] ] := v; pos[ cs[v] ] := u; tam := cs[u]; cs[u] := cs[v]; cs[v] := tam; end; procedure upheap(k :word); var v :word; begin v := a[k]; a[0] := maxint; while a[k div 2] <= v do begin doi( k, k div 2); k := k div 2; end; end; procedure downheap( k :word); var j :integer; begin while k <= m div 2 do begin j := 2*k; if j < m then if a[j] < a[j+1] then inc(j); if a[k] >= a[j] then exit ; doi(k, j); k := j; end; end; procedure ghi_max; begin writeln( a[1] ); end; procedure xoa; var k :word; begin inc(n); if n = m+1 then n := 1; k := pos[n]; doi(k,m); dec(m); if k > m then exit; upheap(k); downheap(k); end; procedure them; begin inc(m); a[m] := x; cs[m] := n; pos[n] := m; upheap(m); end; begin readln( m); for n := 1 to m do begin read( a[n]); pos[n] := n; cs[n] := n; upheap(n); end; repeat ghi_max; xoa; read( x); if x = -1 then exit; them; until false; end. Re: Why compilation error? Please help me ! > Here is my program : > > const max = 15000; > > var a,pos,cs :array[0..max] of word; > > n,m :word; > x :longint; > > > procedure doi(u,v :word); > var tam :word; > begin > tam := a[u]; a[u] := a[v]; a[v] := tam; > pos[ cs[u] ] := v; pos[ cs[v] ] := u; > tam := cs[u]; cs[u] := cs[v]; cs[v] := tam; > end; > > > procedure upheap(k :word); > var v :word; > begin > v := a[k]; a[0] := maxint; > while a[k div 2] <= v do > begin > doi( k, k div 2); > k := k div 2; > end; > end; > > > procedure downheap( k :word); > var j :integer; > begin > while k <= m div 2 do > begin > j := 2*k; > if j < m then if a[j] < a[j+1] then inc(j); > if a[k] >= a[j] then exit ; > doi(k, j); > k := j; > end; > end; > > > procedure ghi_max; > begin > writeln( a[1] ); > end; > > > procedure xoa; > var k :word; > begin > inc(n); if n = m+1 then n := 1; > k := pos[n]; > > doi(k,m); dec(m); > if k > m then exit; > > upheap(k); > downheap(k); > end; > > > procedure them; > begin > inc(m); > a[m] := x; > cs[m] := n; > pos[n] := m; > upheap(m); > end; > > > begin > readln( m); > > for n := 1 to m do > begin read( a[n]); > pos[n] := n; cs[n] := n; > upheap(n); > end; > > repeat > ghi_max; > xoa; > > read( x); > if x = -1 then exit; > them; > until false; > end. > Hello! First of all, I sorry for my bad English. And now: programs on Timus are compiled in Delphi. type Integer range in Delphi is –2147483648..2147483647, type Word range in Delphi is 0..65535, hence arices error='constant expression violates subrange bounds', when you write 'a[0] := maxint' in procedure 'upheap'. If you write a[0]:=65535 I think that all will be ok! :) |
|
|