STL格斗场

热血格斗场
#include<iostream>
#include<set>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
set<pair<int,int> >record;
void solve(int p,int i)
{
	record.insert(make_pair(p,i));
	set<pair<int,int> >::iterator it,left,right;
	right=record.end();
	right--;
	it=record.find(make_pair(p,i));
	if(it==record.begin())
	{
		it++;
		printf("%d %d\n",i,it->second);
	}
	else if(it==right)
	{
		it--;
		printf("%d %d\n",i,it->second);
	}
	else
	{
		left=it;
		left--;
		right=it;
		right++;
		if((it->first-left->first)<=(right->first-it->first))
		    printf("%d %d\n",i,left->second);
		else
		    printf("%d %d\n",i,right->second);
	}
}
int main()
{
	int n;
	scanf("%d",&n);
	record.insert(make_pair(1000000000,1));
	for(int i=0;i<n;i++)
	{
		int power,id;
		scanf("%d%d",&id,&power);
		solve(power,id);
	}
	return 0;
}

冷血格斗场

#include<iostream>
#include<set>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
set<pair<int,int> >record;
void solve(int p,int i)
{
	record.insert(make_pair(p,i));
	set<pair<int,int> >::iterator it,left,right;
	right=record.end();
	right--;
	it=record.find(make_pair(p,i));
	if(it==record.begin())
	{
		right=it;
		right++;
		printf("%d %d\n",i,right->second);
		//power值相等,则按id排序,将id大的删除 
		if(p==right->first)
		{
			record.erase(right);
		}    
	}
	else if(it==right)
	{
		left=it;
		left--;
		printf("%d %d\n",i,left->second);
		if(p==left->first)
		{
			record.erase(it);
		}
	}
	else
	{
		left=it;
		left--;
		right=it;
		right++;
		if((it->first-left->first)<(right->first-it->first))
		    printf("%d %d\n",i,left->second);
		else if((it->first-left->first)>(right->first-it->first))
		    printf("%d %d\n",i,right->second);
		else
		{
			if(left->second<right->second)
			{
				printf("%d %d\n",i,left->second);
			}
			else
			{
				printf("%d %d\n",i,right->second);
			}
		}
		if(p==left->first)
		{
			record.erase(left);
		}
		if(p==right->first)
		{
			record.erase(right);
		}
	}
}
int main()
{
	int n;
	scanf("%d",&n);
	record.insert(make_pair(1000000000,1));

	for(int i=0;i<n;i++)
	{
		int power,id;
		scanf("%d%d",&id,&power);
		solve(power,id);
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值