Advertisement
Ritam_C

Climbing Leaderboard

Mar 14th, 2021
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector<int> climbingLeaderboard(vector<long long> ranked, vector<long long> player) {
  5.     set<long long> s;
  6.     vector<int> v;
  7.     vector<long long> tmp;
  8.    
  9.     for(int i = 0; i < ranked.size(); i++){
  10.         s.insert(ranked[i]);
  11.     }
  12.  
  13.     for(auto i = s.begin(); i != s.end(); i++){
  14.         tmp.push_back(*i);
  15.     }
  16.  
  17.     for(int i = 0; i < player.size(); i++){
  18.         if(player[i] < tmp[0]){
  19.             v.push_back(tmp.size()+1);
  20.         } else if(player[i] >= tmp[tmp.size()-1]){
  21.             v.push_back(1);
  22.         } else if(player[i] == tmp[0]){
  23.             v.push_back(tmp.size());
  24.         } else{
  25.             int s = 1, e = tmp.size(), pos = 1, pm = 0;
  26.             while(true){
  27.                 int m = (s+e)/2;
  28.                 pos = m;
  29.                
  30.                 if(tmp[m] == player[i]){
  31.                     break;
  32.                 } else{
  33.                     if(pm != m){
  34.                         if(tmp[m-1] > player[i] && tmp[s-1] < player[i]){
  35.                             e = m;
  36.                         } else if(tmp[m-1] < player[i] && tmp[e-1] > player[i]){
  37.                             s = m;
  38.                         }
  39.                     } else{
  40.                         if(tmp[m] < player[i]){
  41.                             pos = m;
  42.                         } else if(tmp[m] > player[i]){
  43.                             pos--;
  44.                         } else{
  45.                             pos = m;
  46.                         }
  47.                         break;
  48.                     }
  49.                 }
  50.                 pm = m;
  51.             }
  52.  
  53.             v.push_back(tmp.size()-pos);
  54.         }
  55.     }
  56.     return v;
  57. }
  58.  
  59. int main()
  60. {
  61.     int ranked_count;
  62.     cin >> ranked_count;
  63.    
  64.     vector<long long> ranked;
  65.  
  66.     for (int i = 0; i < ranked_count; i++) {
  67.         long long x;
  68.         cin >> x;
  69.         ranked.push_back(x);
  70.     }
  71.  
  72.     int player_count;
  73.     cin >> player_count;
  74.  
  75.     vector<long long> player;
  76.  
  77.     for (int i = 0; i < player_count; i++) {
  78.         long long x;
  79.         cin >> x;
  80.         player.push_back(x);
  81.     }
  82.  
  83.     vector<int> result = climbingLeaderboard(ranked, player);
  84.  
  85.     for (int i = 0; i < result.size(); i++) {
  86.         cout << result[i];
  87.  
  88.         if (i != result.size() - 1) {
  89.             cout << "\n";
  90.         }
  91.     }
  92.  
  93.     cout << "\n";
  94.     return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement