void insert_review(long long val) { if (input < 3) { insert_max(val); return; } long third = input/3; long size = min_heap.size() - 1; long long temp; if (size < third) { // can add logic if (val > max_heap[1]) { insert_min(val); } else { temp = delete_max(); if (temp != -1) insert_min(temp); insert_max(val); } } else { // can't add logic if (val > min_heap[1]) { temp = delete_min(); insert_min(val); if (temp != -1) insert_max(temp); } else { insert_max(val); } } }
void put_median(int num) { int bal=check(); if(bal>=1) { if(num>=median) { insert_min(num); } else { insert_min(maxheap[1]); maxheap[1]=maxheap[maxheap[0]]; maxheap[0]--; max_heapify(1); insert_max(num); } } else { if(num>median) { insert_min(num); insert_max(minheap[1]); minheap[1]=minheap[minheap[0]]; minheap[0]--; min_heapify(1); } else { insert_max(num); } } return; }
void addNum(int num) { if(heap_min.size() + heap_max.size() < 2) { if(heap_min.size() + heap_max.size() == 0) heap_min.push_back(num); else { if(num > pre) { heap_min.pop_back(); heap_min.push_back(num); heap_max.push_back(pre); } else heap_max.push_back(num); } } else { if(num < heap_max[0]) insert_max(num); else insert_min(num); } int s = heap_max.size(); int x = heap_min.size(); if(abs(s-x) > 1) { if(heap_max.size() > heap_min.size()) { insert_min(heap_max[0]); swap(heap_max[0], heap_max[heap_max.size()-1]); heap_max.pop_back(); int i = 0; while(true) { int left = i*2 + 1, right = i*2 + 2; int maxn = heap_max[i], index = -1; if(left < heap_max.size() && heap_max[left] > maxn) maxn = heap_max[left], index = left; if(right < heap_max.size() && heap_max[right] > maxn) maxn = heap_max[right], index = right; if(maxn == heap_max[i]) break; swap(heap_max[index], heap_max[i]); i = index; } } else { insert_max(heap_min[0]); swap(heap_min[0], heap_min[heap_min.size()-1]); heap_min.pop_back(); int i = 0; while(true) { int left = i*2 + 1, right = i*2 + 2; int minn = heap_min[i], index = -1; if(left < heap_min.size() && heap_min[left] < minn) minn = heap_min[left], index = left; if(right < heap_min.size() && heap_min[right] < minn) minn = heap_min[right], index = right; if(minn == heap_min[i]) break; swap(heap_min[index], heap_min[i]); i = index; } } } pre = num; }
int main() { maxheap[0]=0; int n,i; int s=5; while(s--) { scanf("%d",&n); insert_min(n); // for(i=1;i<=a[0];i++) { // printf("%d ",maxheap[i]); } } s=5; while(s--) { printf("Min:%d ",maxheap[1]); maxheap[1]=maxheap[maxheap[0]]; maxheap[0]--; heapify(1); for(i=1;i<=maxheap[0];i++) { // printf("%d ",maxheap[i]); } printf("\n"); } return 0; }