Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #define N 100000
- using namespace std;
- struct task
- {
- int priorytet;
- int id;
- };
- task tab[N];
- int n=0; //heapsize
- int numbertask=0;
- int parent(int i)
- {
- return i/2;
- }
- int left(int i)
- {
- return 2*i;
- }
- int right(int i)
- {
- return 2*i+1;
- }
- void max_heapsize(int i)
- {
- int l=left(i);
- int r=right(i);
- int maxx=i;
- if (l<=n && tab[l].priorytet>tab[maxx].priorytet || (tab[l].priorytet==tab[maxx].priorytet && tab[l].id<tab[maxx].id))
- {
- maxx=l;
- }
- if (r<=n && tab[r].priorytet>tab[maxx].priorytet || (tab[r].priorytet==tab[maxx].priorytet && tab[r].id<tab[maxx].id))
- {
- maxx=r;
- }
- if (maxx!=i)
- {
- int tmm=tab[i].id;
- tab[i].id=tab[maxx].id;
- tab[maxx].id=tmm;
- int tmp=tab[i].priorytet;
- tab[i].priorytet=tab[maxx].priorytet;
- tab[maxx].priorytet=tmp;
- max_heapsize(maxx);
- }
- }
- int heap_extrat_max()
- {
- if (n==0)
- {
- return 0;
- }
- else
- {
- int wynik=tab[1].id;
- tab[1].priorytet=tab[n].priorytet;
- tab[1].id=tab[n].id;
- n--;
- max_heapsize(1);
- return wynik;
- }
- }
- void heap_increase_key(int i, int key)
- {
- if (key<tab[i].priorytet)
- {
- return;
- }
- else
- {
- tab[i].priorytet=key;
- while(i>1 && (tab[i].priorytet>tab[parent(i)].priorytet) || (tab[i].priorytet==tab[parent(i)].priorytet && tab[i].id<tab[parent(i)].id))
- {
- int tmm=tab[i].id;
- tab[i].id=tab[parent(i)].id;
- tab[parent(i)].id=tmm;
- int tmp=tab[i].priorytet;
- tab[i].priorytet=tab[parent(i)].priorytet;
- tab[parent(i)].priorytet=tmp;
- i=parent(i);
- }
- return;
- }
- }
- void max_heap_insert(int key, int idk)
- {
- if (n==N)
- {
- return;
- }
- else
- {
- n++;
- tab[n].id=idk;
- tab[n].priorytet=key;
- heap_increase_key(n, key);
- }
- }
- int main()
- {
- int a, b;
- cin>>b;
- for(int i=0; i<b; i++)
- {
- cin>>a;
- if (a!=0)
- {
- numbertask++;
- max_heap_insert(a, numbertask);
- }
- else
- {
- int answer=heap_extrat_max();
- if (answer!=0)
- {
- cout<<answer<<" "<<n<<endl;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement