手写堆
1 int size = 0;//堆的大小 2 int heap[maxn]; 3 void push( int x ) 4 { 5 int i = size; 6 while( i > 0 ) 7 { 8 int p = (i - 1)/2; 9 if( heap[p] <=x ) 10 break; 11 12 heap[i] = heap[p]; 13 i = p; 14 } 15 heap[i] = x; 16 size ++; 17 } 18 19 int pop( ) 20 { 21 int ret = heap[0]; 22 int x = heap[--size]; 23 int i = 0; 24 while( (2*i + 1) < size ) 25 { 26 int a = 2*i + 1; 27 int b = 2*i + 2; 28 if( b<size && heap[b] < heap[a] ) 29 a = b; 30 if(heap[a] > x) 31 break; 32 heap[i] = heap[a]; 33 i = a; 34 } 35 heap[i] = x; 36 return ret; 37 }

浙公网安备 33010602011771号