RATING - Coder Ratings - SPOJ Solution C++

  Problem Link : RATING 


👉 Hint : Policy based DS - ordered_set

 


✅ C++ Solution :

 
#include<bits/stdc++.h>
using namespace std;
 
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp> 
using namespace __gnu_pbds; 

#define ll long long int  
#define ordered_set tree<pair<ll,ll>, null_type,less<pair<ll,ll> >, rb_tree_tag,tree_order_statistics_node_update> 
#define mp make_pair
int main()
{
	ll n;
	cin>>n;
	pair<pair<ll,ll>,ll> arr[n];
	map<pair<ll,ll>,ll> rpt;
	ll ans[n];
	for(ll i=0;i<n;i++)
	{
		cin>>arr[i].first.first>>arr[i].first.second;
		arr[i].second=i;
	}
	sort(arr,arr+n);

	ordered_set oset;
	unordered_map<ll,ll> cnt;
	ans[arr[0].second]=0;
	ll p=arr[0].first.second;
	cnt[p]++;
	oset.insert(mp(arr[0].first.second,cnt[arr[0].first.second]));
	rpt[arr[0].first]=1;
	for(ll i=1;i<n;i++)
	{
		cnt[arr[i].first.second]++;
		oset.insert(mp(arr[i].first.second,cnt[arr[i].first.second]));
		ans[arr[i].second]=oset.order_of_key(mp(arr[i].first.second,cnt[arr[i].first.second]))-rpt[arr[i].first];
		rpt[arr[i].first]++;
	}

	for(auto it : ans)
		cout<<it<<"\n";

}

 

Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook. 

😇Happy Learning!!