日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ3481(待完善版本,请看注释)

發布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ3481(待完善版本,请看注释) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <iostream> using namespace std;//根據需求調整大小 #define SIZE 10typedef struct Node{int K;int P; }Node; Node big[SIZE]; Node small[SIZE]; int big_size=1; int small_size=1;void swap(Node x, Node y) {Node tmp;tmp.K = x.K;tmp.P = x.P;x.K = y.K;x.P = y.P;y.K = tmp.K;y.P = tmp.P; } void big_fixDown(Node heap[], int pos, int size){int x = pos;if(x > size) return;//exit// 選出最大的int l = 2 * x;int r = l + 1;int maxPos = x;if(l <= size && heap[maxPos].P < heap[l].P) maxPos = l;if(r <= size && heap[maxPos].P < heap[r].P) maxPos = r;if(maxPos != x){ //如果父節點不是最大的,進行互換,并在新的點上繼續fixDown swap(heap[x], heap[maxPos]);big_fixDown(heap, maxPos, size);} } void small_fixDown(Node heap[], int pos, int size){int x = pos;if(x > size) return;//exit// 選出最大的int l = 2 * x;int r = l + 1;int maxPos = x;if(l <= size && heap[maxPos].P > heap[l].P) maxPos = l;if(r <= size && heap[maxPos].P > heap[r].P) maxPos = r;if(maxPos != x){ //如果父節點不是最大的,進行互換,并在新的點上繼續fixDown swap(heap[x], heap[maxPos]);big_fixDown(heap, maxPos, size);} }void big_fixUp(Node heap[], int pos){int x = pos;int p;while(x > 1){p = x/2;if(heap[x].P > heap[p].P){swap(heap[x], heap[p]);x = p;}else return;} } void small_fixUp(Node heap[], int pos){int x = pos;int p;while(x > 1){p = x/2;if(heap[x].P < heap[p].P){swap(heap[x], heap[p]);x = p;}else return;} } void buildHeap(int heap[], int size){for(int i = size/2; i >= 1; i--){big_fixDown(heap, i, size);} }//heapSort前要先build heap void heapSort(int heap[], int size){int oriSize = size;for(int i = 0; i < oriSize - 1; i++){ //注意不要把oriSize和size混在一起//互換堆頂和最后一個元素,將堆頂元素放在數組最后面swap(heap[size], heap[1]);size--;fixDown(heap, 1, size);} } void insert(){//構建大根堆和小根堆 big_fixUp(big,big_size);small_fixUp(small,small_size); } int big_pop(){//函數里面還沒有加pop大根堆對于小跟堆的影響int ret = 0;ret = big[1].K;big[1] = big[big_size-1];big[big_size-1].P = 0;//downbig_fixDown(big,1,big_size);return ret; }void small_pop(){//函數里面還沒有加pop小根堆對于大跟堆的影響int ret = 0;ret = small[1].K;small[1] = small[big_size-1];small[big_size-1].P = 0;small_fixDown(small,1,small_size);return ret; } int main(){freopen("input.txt","r",stdin);int cmd;int k,p;while(scanf("%d",cmd)&&cmd!=0){switch(cmd){case 1: scanf("%d %d",&k,&p);big[big_size].K = k;big[big_size++].P = p;//指向要放入的位置small[small_size].K = k;small[small_size++].P = p;insert();break;case 2: break;case 3: break;}}return 0; }

?

轉載于:https://www.cnblogs.com/linux0537/p/7523896.html

總結

以上是生活随笔為你收集整理的POJ3481(待完善版本,请看注释)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。