Advertisement
Hezov

Ordinea de rank a unui tablou

Mar 22nd, 2025 (edited)
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. /*
  2.     22 Martie 2025, Pahonie George-Alessio
  3.     Ordinea de rank a unui tablou
  4.  
  5.  
  6.     Se dau n elemente intr-un tablou.
  7.     Sa se inlocuiasca fiecare element cu
  8.     pozitia pe care s-ar afla daca tabloul
  9.     ar fi sortat crescator. Daca avem elemente
  10.     identice acestea vor primi aceiasi pozitie.
  11.  
  12.     Exemplu :   (indexare de la 1)
  13.            Pozitia :  1 2 3 4 5
  14.     tablou initial : {2,5,3,8,4}
  15.     tabloul sortat : {2,3,4,5,8}
  16.     de afisat      : {1,4,2,5,3}
  17.     Explicatie : dupa ce vectorul este sortat -
  18.  
  19.     2 se afla pe pozitia 1
  20.     5 se afla pe pozitia 4
  21.     3 se afla pe pozitia 2
  22.     8 se afla pe pozitia 5
  23.     4 se afla pe pozitia 3
  24.  
  25.     Solutie in O(NlogN) cu functia sort.
  26.  
  27. */
  28.  
  29. #include <iostream>
  30. #include <algorithm>
  31. using namespace std;
  32. int v[10005],p[10005], r[10005];
  33. bool cmp(int a, int b)
  34. {
  35.     return v[a] < v[b];
  36. }
  37. int main()
  38. {
  39.     int n;
  40.     cin >> n;
  41.     for(int i = 1;i<=n;i++)
  42.     {
  43.         cin >> v[i];
  44.         p[i] = i;
  45.     }
  46.     sort(p+1,p+n+1,cmp);
  47.     /// Acum v[p[i]] este tabloul v sortat crescator.
  48.     // Adica p[i] = pozitia elementului i din v sortat crescator (exact ce avem nevoie)
  49.     /*
  50.     for(int i = 1;i<=n;i++)
  51.         cout << v[p[i]] << ' ';
  52.     cout << '\n';
  53.     */
  54.  
  55.     int cnt = 1;
  56.     r[p[1]] = cnt;
  57.     for(int i = 2;i<=n;i++)
  58.     {
  59.         // Daca in v sortat elementele nu sunt identice
  60.         // atunci avem un element nou.
  61.         if(v[p[i]] != v[p[i-1]])
  62.             cnt++;
  63.         r[p[i]] = cnt;
  64.     }
  65.     for(int i = 1;i<=n;i++)
  66.         cout << r[i] << ' ';
  67.     return 0;
  68. }
  69.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement