AOJ 0566 - Soccer

#include<iostream>
#include<algorithm>

struct team{
	int index, points, rank;
};

bool descending_team_with_point(const team& l_team, const team& r_team){
	return l_team.points > r_team.points;
}

bool ascending_team_with_index(const team& l_team, const team& r_team){
	return l_team.index < r_team.index;
}

int main(){
	int n, i, a, b, c, d;
	team arr[101];
	
	for(i=0;i<101;i++){
		arr[i].index = i;
		arr[i].points = 0;
	}

	std::cin >> n;
	for(i=n*(n-1)/2;i--;){
		std::cin >> a >> b >> c >> d;
		if(c>d)arr[a].points+=3;
		else if(c<d)arr[b].points+=3;
		else arr[a].points++, arr[b].points++;
	}

	std::sort(arr+1, arr+n+1, descending_team_with_point);
	int prev_value = -1, rank = 0;
	for(i=1;i<=n;i++){
		if(arr[i].points != prev_value){
			rank = i;
		}
		
		arr[i].rank = rank;
		
		prev_value = arr[i].points;
	}
	std::sort(arr+1, arr+n+1, ascending_team_with_index);

	for(i=1;i<=n;i++){
		std::cout << arr[i].rank << std::endl;
	}
}