Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct Panstwo
- {
- int nr,wspolczynnik;
- };
- //void display(Panstwo* tab,int n)
- //{
- // for(int i=0;i<n;++i)
- // {
- // cout<<tab[i].nr<<" "<<tab[i].wspolczynnik<<endl;
- // }cout<<endl;
- //}
- int sortujgalaz_w_gore(int*& indexy,Panstwo*& tab,int indextablicy,int wszystkich_elementow)//warstw = getlayer
- {
- int ile=0; int ojciec=indextablicy;/*potrzebne tak?*/
- for(;indextablicy>0&&ojciec>0;--indextablicy,indextablicy/=2)
- {
- ojciec=indextablicy-1;
- ojciec/=2;
- if(tab[indextablicy].wspolczynnik>tab[ojciec].wspolczynnik)//a jak sa rowne to nic nie zamieniaj
- {
- swap(tab[indextablicy],tab[ojciec]);
- swap(indexy[indextablicy],indexy[indextablicy]);
- ++ile;
- }
- else
- {//prawy wiekszy wspolczynnik i wiekszy index
- if(indexy[indextablicy+1]<=/*<*/wszystkich_elementow)//istnieje prawy brat!
- {
- if(tab[indextablicy].wspolczynnik>/*<=*/tab[indextablicy+1].wspolczynnik)
- {
- swap(tab[indextablicy],tab[indextablicy+1]);
- swap(indexy[indextablicy],indexy[indextablicy]);
- ++ile;
- }
- else if(tab[indextablicy].wspolczynnik==tab[indextablicy+1].wspolczynnik)
- {
- if(tab[indextablicy].nr>tab[indextablicy+1].nr)
- {
- swap(tab[indextablicy],tab[indextablicy+1]);
- swap(indexy[indextablicy],indexy[indextablicy]);
- ++ile;
- }
- }
- }
- break;
- }
- }
- return ile;
- }
- int sortujgalaz_w_dol(int*& indexy,Panstwo*& tab,int indextablicy,int wszystkich_elementow)
- {
- int ile=0;
- for(;indextablicy<wszystkich_elementow;indextablicy*=2,++indextablicy)
- {
- int lsyn=indextablicy*=2;++lsyn;//SPRAWDZAC CZY TO NIE WYJDZIE POZA ZAKRES!?
- if(tab[indextablicy].wspolczynnik<tab[lsyn].wspolczynnik)
- {
- swap(tab[indextablicy],tab[lsyn]);
- swap(indexy[indextablicy],indexy[lsyn]);
- ++ile;
- }
- else
- {
- if(indexy[indextablicy+1]<wszystkich_elementow)//istnieje prawy brat!
- {
- if(tab[indextablicy].wspolczynnik>/*<=*/tab[indextablicy+1].wspolczynnik)
- {
- swap(tab[indextablicy],tab[indextablicy+1]);
- swap(indexy[indextablicy],indexy[indextablicy]);
- ++ile;
- }
- else if(tab[indextablicy].wspolczynnik==tab[indextablicy+1].wspolczynnik)
- {
- if(tab[indextablicy].nr>tab[indextablicy+1].nr)
- {
- swap(tab[indextablicy],tab[indextablicy+1]);
- swap(indexy[indextablicy],indexy[indextablicy]);
- ++ile;
- }
- }
- }
- break;
- }
- }
- return ile;
- }//warstw = getlayer
- int main()
- {
- ios_base::sync_with_stdio(false);
- int n;cin>>n;
- int ile=0;
- Panstwo* tab=new Panstwo[n];
- int* indexy=new int[1001];//przechowuje indeksy elementow /*zalozenie n<=1000*/
- for(int i=0;i<n;++i)
- {
- cin>>tab[i].nr;
- cin>>tab[i].wspolczynnik;
- indexy[tab[i].nr]=i;//zeby latwiej bylo szukac to przypisane indeksy
- }
- int m;cin>>m;
- for(int j=0;j<m;++j)
- {
- int p,w;
- cin>>p>>w;
- int szukany=indexy[p];//index szukanego elementu
- tab[szukany].wspolczynnik=w;//zmiana wartosci
- if(w>tab[(szukany-1)/2].wspolczynnik)
- {
- /*przesiewaj w gore*/
- ile+=sortujgalaz_w_gore(indexy,tab,w,n);
- }
- else if(w<tab[(szukany*2)+1].wspolczynnik)
- {
- ile+=sortujgalaz_w_dol(indexy,tab,w,n);
- /*przesiewaj w dol*/
- }
- }
- cout<<ile;
- delete [] tab;
- delete [] indexy;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement