热血格斗场
#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;
}