Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct Panstwo
- {
- int nr;
- unsigned wspolczynnik;
- };
- int main()
- {
- ios_base::sync_with_stdio(false);
- unsigned n;cin>>n;
- unsigned ile=0;
- Panstwo* tab=new Panstwo[n];
- unsigned k;
- unsigned int max=0;
- int pom,pom2;
- int indexy[1001];//przechowuje indeksy elementow /*zalozenie n<=1000*/
- for(unsigned 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
- }
- unsigned m;cin>>m;
- for(unsigned j=0;j<m;++j)
- {
- unsigned p,w;
- cin>>p>>w;
- int i=indexy[p/*i*/];//index szukanego elementu
- tab[i].wspolczynnik=w;//zmiana wartosci
- /*PRZESIEW*/ /*fatherV*/
- if((i>0)&&(w>tab[k=(i-1)/2].wspolczynnik))
- {
- /*przesiew w gore*/
- while((i>0)&&(w>tab[k].wspolczynnik))
- {
- swap(indexy[tab[k].nr],indexy[tab[i].nr]);
- swap(tab[i],tab[k]);//?
- ++ile;
- i=k;
- --k;
- k/=2;
- }
- } /*V l-son*/ /*p- son*/
- else /*CHECKPOINT*/
- {//zmienic indeks szukanego
- k=(i*2)+1;
- if(((k<n)&&(w<tab[k].wspolczynnik)) || ((k+1<n)&&(w<tab[k+1].wspolczynnik)))
- {
- // int k=i*2;--k;int k+1=k+1;
- while(((k<n) && (w<tab[k].wspolczynnik)) || ((k+1<n) && (w<tab[k+1].wspolczynnik)))
- {
- if((k+1<n)&&(tab[k+1].wspolczynnik>tab[k].wspolczynnik))//!!
- {
- max=k+1;
- // swap(indexy[i],indexy[k+1]);
- // swap(indexy[tab[i].nr],indexy[tab[k+1].nr]);
- // ++ile;
- // i=k+1;
- // k+1*=2;
- // ++k+1;
- }
- else
- {
- max=k;
- // swap(indexy[i],indexy[k]);
- // swap(indexy[tab[i].nr],indexy[tab[k].nr]);
- // ++ile;
- // i=k;
- // k*=2;
- // ++k;/*ZMIENIAC TEZ k+1A?*/
- }
- pom=tab[max].nr;
- pom2=tab[i].nr;
- swap(indexy[pom2],indexy[pom]);//!!!!!!!
- swap(tab[i],tab[max]);
- ++ile;
- i=max;
- k=2*i+1;
- }
- }
- //else break;
- }
- }
- cout<<ile;
- delete [] tab;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement