• 周三. 4 月 22nd, 2026

物嫩软件资讯网

软件资讯来物嫩

STL格斗场

admin@wunen

5 月 31, 2025
热血格斗场
#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;
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注