powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Неправильное построение кучи
1 сообщений из 1, страница 1 из 1
Неправильное построение кучи
    #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
1 сообщений из 1, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Неправильное построение кучи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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