Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- vector<int> climbingLeaderboard(vector<long long> ranked, vector<long long> player) {
- set<long long> s;
- vector<int> v;
- vector<long long> tmp;
- for(int i = 0; i < ranked.size(); i++){
- s.insert(ranked[i]);
- }
- for(auto i = s.begin(); i != s.end(); i++){
- tmp.push_back(*i);
- }
- for(int i = 0; i < player.size(); i++){
- if(player[i] < tmp[0]){
- v.push_back(tmp.size()+1);
- } else if(player[i] >= tmp[tmp.size()-1]){
- v.push_back(1);
- } else if(player[i] == tmp[0]){
- v.push_back(tmp.size());
- } else{
- int s = 1, e = tmp.size(), pos = 1, pm = 0;
- while(true){
- int m = (s+e)/2;
- pos = m;
- if(tmp[m] == player[i]){
- break;
- } else{
- if(pm != m){
- if(tmp[m-1] > player[i] && tmp[s-1] < player[i]){
- e = m;
- } else if(tmp[m-1] < player[i] && tmp[e-1] > player[i]){
- s = m;
- }
- } else{
- if(tmp[m] < player[i]){
- pos = m;
- } else if(tmp[m] > player[i]){
- pos--;
- } else{
- pos = m;
- }
- break;
- }
- }
- pm = m;
- }
- v.push_back(tmp.size()-pos);
- }
- }
- return v;
- }
- int main()
- {
- int ranked_count;
- cin >> ranked_count;
- vector<long long> ranked;
- for (int i = 0; i < ranked_count; i++) {
- long long x;
- cin >> x;
- ranked.push_back(x);
- }
- int player_count;
- cin >> player_count;
- vector<long long> player;
- for (int i = 0; i < player_count; i++) {
- long long x;
- cin >> x;
- player.push_back(x);
- }
- vector<int> result = climbingLeaderboard(ranked, player);
- for (int i = 0; i < result.size(); i++) {
- cout << result[i];
- if (i != result.size() - 1) {
- cout << "\n";
- }
- }
- cout << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement