0061 - Rank Checker

#include <cstdio>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

typedef pair<int,int> P_II;

void Slove(void)	{
	int number, point, before_number, before_point, team;
	vector<int> rank(1000,1);
	priority_queue< P_II,vector<P_II> > que;

	while ( scanf ("%d,%d", &number, &point) && (number || point) )
		que.push( P_II(point,number) );
	P_II p=que.top(); que.pop();
	before_point=p.first; before_number=p.second;
	while ( !que.empty() )	{
		p=que.top(); que.pop();
		if (before_point != p.first)	rank[p.second]+=rank[before_number];
		else	rank[p.second]=rank[before_number];
		before_point=p.first; before_number=p.second;
	}
	while (cin >> team)
		cout << rank[team] << endl;
}

int main(void)	{
	Slove();
	return 0;
}

無駄に色々使いたかった。