Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define _MAX_ 100100 //TO JEST DO 'n' - OZNACZA ILOSC WYBOROW ZWIEKSZONE
- #define _MAX_ID_ 999999 //ILOSC ALGOLCZYKOW ZWIEKSZONA
- #define _FATHER_ i/2 //INDEX OJCA
- #define _CHANGE_(a,b) { tmp = a; a = b; b = tmp; } //ZAMIANA ALGOLCZYKOW
- #define _CHANGE_ID_(a,b) { q=a ; a=b ; b=q ; } //ZAMIANA INDEXOW
- typedef struct y{
- int id,pr;
- }algolczyk;
- algolczyk tab[_MAX_]; //TABLICA STRUKTUR ALGOLI
- int e=0 , record[_MAX_ID_]; //E - WYSOKOSC KOPCA || RECORDY PRZECHOWUJA INDEXY
- void heapsort() //tu nie jestem pewien co do złożoności ale nic innego nie wychodziło ;/
- {
- int i=e , q;
- algolczyk tmp;
- for(i ; i>1 ; i--){
- if((tab[i].pr > tab[_FATHER_].pr) || ((tab[i].pr == tab[_FATHER_].pr) && (tab[i].id < tab[_FATHER_].id))){
- _CHANGE_(tab[i] , tab[_FATHER_]);
- _CHANGE_ID_(record[tab[i].id] , record[tab[_FATHER_].id]);
- }
- }
- }
- void add()
- {
- e++; //ZWIEKSZENIE KOPCA
- scanf("%d %d", &tab[e].id , &tab[e].pr);
- record[tab[e].id] = e; //ZAPAMIETANIE INDEKSU ALGOLCZYKA
- heapsort();
- }
- void readd()
- {
- int a , b; //A DO INDEKSY || B TO O ILE PODNOSIMY ŁAPOWKE
- scanf("%d %d " , &a, &b);
- tab[record[a]].pr += b; //OCZYWISCIE PODNOSIMY LAPOWKE
- heapsort();
- }
- int del()
- {
- int q; //ZMIENNE DO ZAMIAN
- algolczyk tmp;
- if(!e){ //JESLI E == 0 CZYLI BRAKUJE ELEMENTOW TO ZNACZY ZE PUSTY I WYSWIETLA BRAK I KONCZY FUNKCJE
- printf("BRAK\n");
- return 0;
- }
- printf("%d\n",tab[1].id); //WYSWIETLA PIERWSZY ELEMENT KTORY BEDZIE USUWANY
- _CHANGE_(tab[1] , tab[e]); //DWIE LINIE DO ZMIANY PIERWSZEGO I OSTATNIEGO ELEMENTU
- _CHANGE_ID_(record[tab[1].id] , record[tab[e].id]);
- e--; //ZMIEJSZENIE KOPCA O 1
- heapsort();
- return 0;
- }
- int main()
- {
- int i , n;
- char znak; //PRZECHOWUJE ZNAK "A , I , P"
- scanf("%d",&n);
- for(i=0;i<n;i++){
- scanf("%s",&znak);
- switch(znak){
- case 'A' :
- add();
- break;
- case 'I' :
- readd();
- break;
- case 'P' :
- del();
- break;
- }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment