//INCREASE KEY
#include <stdio.h>
#include<math.h>
int N;
void printArr(int *a){
for(int i=0;i<N;i++)
}
void swap(int *a,int p,int q){
int temp=a[p];
a[p]=a[q];
a[q]=temp;
}
void max_heapify(int a[],int i){
int large=i;
int left=2*i+1;
int right=2*i+2;
if(left<N && a[large]<a[left])
large=left;
if(right<N && a[large]<a[right])
large=right;
if(large!=i){
swap(a,large,i);
max_heapify(a,large);
}
}
void Build_Heap(int a[]){
for(int i=N/2;i>=0;i--){
max_heapify(a,i);
}
}
int getParent(int i){
if(i%2==0)return i/2-1;
else return i/2;
}
void increaseKey(int *a,int i,int key){
if(key<a[i]){
printf("\nkey is less than existing value\n"); return;
}
a[i]=key;
int parent=getParent(i);
while(i>0 && a[parent]<a[i]){
swap(a,i,parent);
i=parent;
parent=getParent(i);
}
}
int main(void) {
int a[]={20,1,200,490,5,678,44,2,7,8,11,2,3000};
N=sizeof(a)/sizeof(int);
printArr(a);
Build_Heap(a);
printArr(a);
increaseKey(a,10,7777);
printArr(a);
return 0;
}
Ly9JTkNSRUFTRSBLRVkKCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZTxtYXRoLmg+CmludCBOOwp2b2lkIHByaW50QXJyKGludCAqYSl7CglwcmludGYoIlxuIik7Cglmb3IoaW50IGk9MDtpPE47aSsrKQoJcHJpbnRmKCIlZCAiLGFbaV0pOwp9Cgp2b2lkIHN3YXAoaW50ICphLGludCBwLGludCBxKXsKCWludCB0ZW1wPWFbcF07CglhW3BdPWFbcV07CglhW3FdPXRlbXA7Cn0KCnZvaWQgbWF4X2hlYXBpZnkoaW50IGFbXSxpbnQgaSl7CglpbnQgbGFyZ2U9aTsKCWludCBsZWZ0PTIqaSsxOwoJaW50IHJpZ2h0PTIqaSsyOwoJaWYobGVmdDxOICYmIGFbbGFyZ2VdPGFbbGVmdF0pCglsYXJnZT1sZWZ0OwoJaWYocmlnaHQ8TiAmJiBhW2xhcmdlXTxhW3JpZ2h0XSkKCWxhcmdlPXJpZ2h0OwoJCglpZihsYXJnZSE9aSl7CgkJc3dhcChhLGxhcmdlLGkpOwoJCW1heF9oZWFwaWZ5KGEsbGFyZ2UpOwoJfQoJCn0KCnZvaWQgQnVpbGRfSGVhcChpbnQgYVtdKXsKCQoJZm9yKGludCBpPU4vMjtpPj0wO2ktLSl7CgkJbWF4X2hlYXBpZnkoYSxpKTsKCX0KfQppbnQgZ2V0UGFyZW50KGludCBpKXsKCWlmKGklMj09MClyZXR1cm4gaS8yLTE7CgllbHNlIHJldHVybiBpLzI7Cn0KCnZvaWQgaW5jcmVhc2VLZXkoaW50ICphLGludCBpLGludCBrZXkpewoJaWYoa2V5PGFbaV0pewoJcHJpbnRmKCJcbmtleSBpcyBsZXNzIHRoYW4gZXhpc3RpbmcgdmFsdWVcbiIpOwoJcmV0dXJuOwoJfQoJYVtpXT1rZXk7CglpbnQgcGFyZW50PWdldFBhcmVudChpKTsKCXdoaWxlKGk+MCAmJiBhW3BhcmVudF08YVtpXSl7CgkgICAgICAgICAgICBzd2FwKGEsaSxwYXJlbnQpOwoJCWk9cGFyZW50OwoJCXBhcmVudD1nZXRQYXJlbnQoaSk7CgogICAgICAgICAgICB9Cn0KaW50IG1haW4odm9pZCkgewoJaW50IGFbXT17MjAsMSwyMDAsNDkwLDUsNjc4LDQ0LDIsNyw4LDExLDIsMzAwMH07CglOPXNpemVvZihhKS9zaXplb2YoaW50KTsKCXByaW50QXJyKGEpOwoJQnVpbGRfSGVhcChhKTsKCXByaW50QXJyKGEpOwoJCglpbmNyZWFzZUtleShhLDEwLDc3NzcpOwoJcHJpbnRBcnIoYSk7CglyZXR1cm4gMDsKfQo=