【OJ2178】RP俱樂部
阿新 • • 發佈:2018-07-22
nod nal name getc cst etc urn algo lin 中的 \(\rm lower\_bound\) 找到第一個大於和第一個小於即可。
2178 -- RP俱樂部(Solution)
題目大意 : 有 \(n\) 個人,每個人有兩個屬性 \(RP\) 和 \(ID\) ,保證 \(RP\) 和 \(ID\) 互不相同。第 \(i\) 個人與前 \(i-1\) 個人中 \(RP\) 與他差值最小的人比賽(如果差值相同則選擇 \(RP\) 更小的)。求每場比賽雙方的 \(ID\) 。(最開始有一個人\(ID=1, RP=10^9\)) \((n\le2\times 10^5,\, ID,RP\leq10^9)\)
Tag: STL
Analysis By LC:
將每個人的信息存入 \(\rm set\) ,利用 \(\rm set\)
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\n",x->id); else { auto y=x; y--; if(u.rp-y->rp>x->rp-u.rp) printf("%d\n",x->id); else printf("%d\n",y->id); } s.insert(u); } }
【OJ2178】RP俱樂部