Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Неправильное построение кучи / 1 сообщений из 1, страница 1 из 1
12.05.2014, 16:02
    #38638918
verter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное построение кучи
Стоит задача по реализации двоичной кучи.

В первой строке ввода задаётся число n (1<=n<=10^5),
далее n строк вида Insert X, где X — натуральное число, не превосходящее 109, или Extract.
Первая операция должна добавлять в кучу число X
Вторая операция должна извлекать максимум из кучи и выводить его в очередной строке вывода.

Пример ввода:
6
Insert 100
Insert 10
Extract
Insert 5
Insert 50
Extract

Вывод результата:
100
50

Вот код, но выдаёт неправильный результат.
В чём ошибка?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
import java.util.Scanner;

public class heap2 {

  private static void Swap(long[] a, int i, int j) 
  { 
    long t = a[i];                                   
    a[i] = a[j];                                
    a[j] = t;                                    
  }

  private static void Heapify(long[] a, int size, int x)
  {
    while (2*x+1 < size) 
    {                        
      int t = 2*x+1;                                                                              
      if ((2*x+2 < size) && (a[2*x+1] < a[2*x+2])) 
      {
        t = 2*x+2;
      }
      if (a[x] < a[t])
      {
        Swap(a,x,t);
        x = t;
      } 
      else { break; }
    }		
  }

  private static long[] Build_Heap(long[] a)
  {
    int u = a.length;
    for (int i=u-1; i>=0; i--)
    {
      Heapify(a,u,i);
    }	
    return a;
  }

  public static void main(String[] args) 
  {
    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt();
    long[] a = new long[100001];
    long[] b = new long[100001];
    String s[] = new String[100001];
    int k = 0;
    int q = 0;
    scan.nextLine();
    for (int i=0; i<n; i++)
    {
      s[i] = scan.nextLine();
      if (s[i].split(" ")[0].equals("Insert"))
      {
	a[k] = Integer.parseInt(s[i].split(" ")[1]);
	Build_Heap(a);
	k++;
      }
      if (s[i].split(" ")[0].equals("Extract")) 
      {
        b[q] = a[0];
	q++;
	Swap(a,0,k);
	a[k] = 0;
	k--;
	Heapify(a,k,0);
      }
    }
    for (int i=0; i<q; i++)
    {
      System.out.print(b[i]);
      System.out.print(" ");
    }
  }

}
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Неправильное построение кучи / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]