#include<iostream>
#include<algorithm>
using namespace std;
int heap[3];
void minheapify(int idx)
{
int left= 1+ 2*idx;
int right = 2+ 2*idx;
int small,smallpos;
if(left<3 && heap[left]<heap[idx])
{
// change the heap[0]
int temp= heap[idx];
small=heap[left];
heap[idx]=small;
heap[left]=temp;
smallpos=left;
}
else
{
// no change in the heap[0]
small= heap[idx];
smallpos=idx;
}
if(right<3 && heap[right]<small)
{
// change heap[0]
int temp= heap[idx];
small=heap[right];
heap[idx]= small;
heap[right]=temp;
smallpos=right;
}
//cout<<small<<" "<<smallpos<<endl;
if(smallpos!=idx)
minheapify(smallpos);
}
int main()
{
int n;
cin>>n;
int a[n+1],i;
for(i=0;i<n;i++)
cin>>a[i];
int ans;
// method 1 : simply sort
// sort(a,a+n);
//ans= a[n-3];
//cout<<ans<<endl;
// create heap of size 3, declared globally for ease
heap[0]=a[0];
heap[1]=a[1];
heap[2]=a[2];
minheapify(0);
// start comparing with other elements
// total complexity is O((n-3)logn(n-3))
// upper bound O((n-kl)logk)
for(i=3;i<n;i++)
{
if(a[i]<heap[0])
{
// since we have created min heap, there'll not be any effect on heap for any element
//which is less than the smallest element of the heap
}
else
{
heap[0]=a[i];
minheapify(0); // log(3) or log(k) in general
}
}
/*cout<<"\n the heap now is : ";
for(i=0;i<3;i++)
cout<<heap[i]<<" ";
*/
// the third maximum number of the input array is the least element of the heap
// thus, output is heap[0]
cout<<"Third maximum is : "<<heap[0]<<endl;
// for generalisztion i.e. for finding k'th maximum, make the heap of size k and repeat the same thing
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBoZWFwWzNdOwoKdm9pZCBtaW5oZWFwaWZ5KGludCBpZHgpCnsKCWludCBsZWZ0PSAxKyAyKmlkeDsKCWludCByaWdodCA9IDIrIDIqaWR4OwoJCglpbnQgc21hbGwsc21hbGxwb3M7CgkKCWlmKGxlZnQ8MyAmJiBoZWFwW2xlZnRdPGhlYXBbaWR4XSkKCSB7CgkgCS8vIGNoYW5nZSB0aGUgaGVhcFswXQoJIAlpbnQgdGVtcD0gaGVhcFtpZHhdOwoJIAlzbWFsbD1oZWFwW2xlZnRdOwoJIAloZWFwW2lkeF09c21hbGw7CgkgCWhlYXBbbGVmdF09dGVtcDsKCSAJc21hbGxwb3M9bGVmdDsKCSB9CgkgZWxzZQoJIHsKCSAJLy8gbm8gY2hhbmdlIGluIHRoZSBoZWFwWzBdIAoJIAlzbWFsbD0gaGVhcFtpZHhdOwoJIAlzbWFsbHBvcz1pZHg7CgkgfQoJIAoJaWYocmlnaHQ8MyAmJiBoZWFwW3JpZ2h0XTxzbWFsbCkKCSB7CgkgCS8vIGNoYW5nZSBoZWFwWzBdCgkgCWludCB0ZW1wPSBoZWFwW2lkeF07CgkgCXNtYWxsPWhlYXBbcmlnaHRdOwoJIAloZWFwW2lkeF09IHNtYWxsOwoJIAloZWFwW3JpZ2h0XT10ZW1wOwoJIAlzbWFsbHBvcz1yaWdodDsKCSB9CgkgCgkgLy9jb3V0PDxzbWFsbDw8IiAiPDxzbWFsbHBvczw8ZW5kbDsKCSAKCWlmKHNtYWxscG9zIT1pZHgpCgkgbWluaGVhcGlmeShzbWFsbHBvcyk7Cn0KCmludCBtYWluKCkKewoJaW50IG47CgljaW4+Pm47CglpbnQgYVtuKzFdLGk7Cglmb3IoaT0wO2k8bjtpKyspCgkgY2luPj5hW2ldOwoJIAoJaW50IGFuczsKCSAKCSAvLyBtZXRob2QgMSA6IHNpbXBseSBzb3J0CgkvLyBzb3J0KGEsYStuKTsKCSAvL2Fucz0gYVtuLTNdOwoJIC8vY291dDw8YW5zPDxlbmRsOwoJIAoJIC8vIGNyZWF0ZSBoZWFwIG9mIHNpemUgMywgZGVjbGFyZWQgZ2xvYmFsbHkgZm9yIGVhc2UKCSAKCSBoZWFwWzBdPWFbMF07CgkgaGVhcFsxXT1hWzFdOwoJIGhlYXBbMl09YVsyXTsKCSAKCSBtaW5oZWFwaWZ5KDApOwoJICAKCSAvLyBzdGFydCBjb21wYXJpbmcgd2l0aCBvdGhlciBlbGVtZW50cyAKCSAKCSAvLyB0b3RhbCBjb21wbGV4aXR5IGlzIE8oKG4tMylsb2duKG4tMykpIAoJIC8vIHVwcGVyIGJvdW5kIE8oKG4ta2wpbG9naykKCSAKCSBmb3IoaT0zO2k8bjtpKyspCgkgewoJIAlpZihhW2ldPGhlYXBbMF0pCgkgCXsKCSAJCS8vIHNpbmNlIHdlIGhhdmUgY3JlYXRlZCBtaW4gaGVhcCwgdGhlcmUnbGwgbm90IGJlIGFueSBlZmZlY3Qgb24gaGVhcCBmb3IgYW55IGVsZW1lbnQKCSAJCS8vd2hpY2ggaXMgbGVzcyB0aGFuIHRoZSBzbWFsbGVzdCBlbGVtZW50IG9mIHRoZSBoZWFwCgkgCX0KCSAJZWxzZQoJIAl7CgkgCQloZWFwWzBdPWFbaV07CgkgCQltaW5oZWFwaWZ5KDApOyAgLy8gbG9nKDMpIG9yIGxvZyhrKSBpbiBnZW5lcmFsCgkgCX0KCSB9CgkgCgkgLypjb3V0PDwiXG4gdGhlIGhlYXAgbm93IGlzIDogIjsKCSBmb3IoaT0wO2k8MztpKyspCgkgIGNvdXQ8PGhlYXBbaV08PCIgIjsKCSAqLwoJIC8vIHRoZSB0aGlyZCBtYXhpbXVtIG51bWJlciBvZiB0aGUgaW5wdXQgYXJyYXkgaXMgdGhlIGxlYXN0IGVsZW1lbnQgb2YgdGhlIGhlYXAgCgkgLy8gdGh1cywgb3V0cHV0IGlzIGhlYXBbMF0gCgkgCgkgY291dDw8IlRoaXJkIG1heGltdW0gaXMgOiAiPDxoZWFwWzBdPDxlbmRsOwoJIAoJIC8vIGZvciBnZW5lcmFsaXN6dGlvbiBpLmUuIGZvciBmaW5kaW5nIGsndGggbWF4aW11bSwgbWFrZSB0aGUgaGVhcCBvZiBzaXplIGsgYW5kIHJlcGVhdCB0aGUgc2FtZSB0aGluZwoJcmV0dXJuIDA7Cn0=