标签:define break std cin 个数 while 输入 return pre
定义一个数组,初始化为空。在数组上执行两种操作:
1、增添1个元素,把1个新的元素放入数组。
2、输出并删除数组中最小的数。
使用堆结构实现上述功能的高效算法。
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 #define maxn 100005 5 6 long sz, heap[maxn]; 7 8 9 void Insert(int x) 10 { 11 int i = sz++; 12 while (i > 0) { 13 int p = (i - 1) >> 1; 14 if (heap[p] > x) { 15 heap[i] = heap[p]; 16 i = p; 17 } 18 else break; 19 } 20 heap[i] = x; 21 } 22 23 void GetTop() 24 { 25 long ans = heap[0]; 26 printf("%ld\n", ans); 27 long x = heap[--sz]; 28 long i = 0; 29 while ((i << 1) + 1 < sz) { 30 long left = (i << 1) + 1; 31 long right = (i << 1) + 2; 32 if (right < sz && heap[right] < heap[left]) 33 left = right; 34 if (heap[left] >= x)break; 35 heap[i] = heap[left]; 36 i = left; 37 } 38 heap[i] = x; 39 } 40 41 int main() 42 { 43 int t, n; 44 cin >> t; 45 while (t--) { 46 sz = 0; 47 memset(heap, 0, sizeof(heap)); 48 cin >> n; 49 while (n--) { 50 int type; 51 long u; 52 cin >> type; 53 if (type == 1) { 54 cin >> u; 55 Insert(u); 56 } 57 else if (type == 2) 58 GetTop(); 59 } 60 } 61 //system("pause"); 62 return 0; 63 }
标签:define break std cin 个数 while 输入 return pre
原文地址:https://www.cnblogs.com/Jeffrey-Y/p/10162270.html