OJ2178RP俱乐部
Posted farway17
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OJ2178RP俱乐部相关的知识,希望对你有一定的参考价值。
2178 -- RP俱乐部(Solution)
题目大意 : 有 (n) 个人,每个人有两个属性 (RP) 和 (ID) ,保证 (RP) 和 (ID) 互不相同。第 (i) 个人与前 (i-1) 个人中 (RP) 与他差值最小的人比赛(如果差值相同则选择 (RP) 更小的)。求每场比赛双方的 (ID) 。(最开始有一个人(ID=1, RP=10^9)) ((nle2 imes 10^5,, ID,RPleq10^9))
Tag: STL
Analysis By LC:
将每个人的信息存入 ( m set) ,利用 ( m set) 中的 ( m lower\_bound) 找到第一个大于和第一个小于即可。
Code By LC :
#include<cstdio>
#include<set>
#include<algorithm>
using namespace std;
inline int _read()
{
char c; int x=0;
for(;c<'0'||c>'9';c=getchar());
for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+c-'0';
return x;
}
const int N=200005;
struct Node
{
int id,rp;
}a[N];
bool operator < (Node x, Node y)
{
if(x.rp==y.rp) return x.id>y.id;
return x.rp<y.rp;
}
set<Node> s;
int main()
{
int n=_read(); s.insert((Node){1,1000000000});
for(int i=1;i<=n;i++)
{
Node u;
u.id=_read(),u.rp=_read();
printf("%d ",u.id);
auto x=s.lower_bound(u);
if(x->rp==u.rp||x==s.begin()) printf("%d
",x->id);
else
{
auto y=x; y--;
if(u.rp-y->rp>x->rp-u.rp) printf("%d
",x->id);
else printf("%d
",y->id);
}
s.insert(u);
}
}
以上是关于OJ2178RP俱乐部的主要内容,如果未能解决你的问题,请参考以下文章