【描述】
甲苯先生在製作乙個online judge,他發現做比賽的人們很關心自己的排名(顯而易見),在acm賽制的比賽中,如果通過題目數量不相等,則通過題目數量多的人排名更靠前,如果通過題目數量相等,則罰時更少的人排名更高。甲苯先生想讓大家幫忙設計乙個程式,每次有人通過之後,就告訴他排名在他的前面有多少人。(不包括和他罰時題數都相同的同學)
【輸入】
第一行輸入乙個整數t表示樣例數。對於每乙個樣例:輸入三個整數m, n, seed。m表示參賽總人數(編號1−m),n表示一共有n次accept(假設accept已經去重,即不存在相同人的相同題目提交)。seed表示生成資料的種子。
接下來要求同學們使用之下的函式生成資料
typedef
unsigned
int ui;
ui randnum
(ui& seed, ui last,
const ui m)
(last為上一次輸出的結果,在沒有輸出結果時last=7)
要求每次生成兩個資料ria,rib 表示ria的人accept了一道題目,他的罰時為rib。(也就是說ria的題目數量+1,罰時長度+rib)。
要求一共生成n組資料,代表一共有n次提交
對於所有資料,保證罰時總和不超過1500000
輸出每次提交輸出一行整數,表示ria在ac後比ria成績高的有多少選手。
【樣例輸入】
17 3 1
【樣例輸出】01
0貌似沒什麼好講的,這就是乙個模板,用平衡樹維護乙個二元組。用pair或者結構體重載運算子即可。值得一提的是,操作過程中,我們不關心節點與人的對應,對於若干個相同的節點,我們任意取出乙個進行操作即可。也就是說,平衡樹並不是維護每個人的資訊,只是維護這樣的一種局面。另外,如果沒有o2,這道題有點卡常,可能需要對讀入的函式進行一些喪心病狂 的修改。最初建樹時注意清空。對於這種多組資料題:陣列不清空,爆零兩行淚 。
#include
#define re register
using
namespace std;
const
int n=
1e5+5;
typedef
unsigned
int ui;
int a,b,l,r,p,n,m;
inline ui red()
struct node
}val[n]
,w[n]
;int ch[n][2
],siz[n]
,pri[n]
,rt;
inline
void
pushup
(const
int&u)
intmerge
(int x,
int y)
void
split
(int u,
const node&v,
int&x,
int&y)
ui last=
7,seed;
inline ui ran()
intbuild
(int l,
int r)
int pre=0;
inline
void
del(
const node&v)
,p,r)
;pre=p;
p=merge
(ch[p][0
],ch[p][1
]); rt=
merge
(l,merge
(p,r));
}inline
intadd
(const node&v)
inline
void
print
(ui x)
intmain()
}}
TJOI2019 甲苯先生的線段樹
tjoi2019 甲苯先生的線段樹 首先原題 cf750g new year and binary tree paths 方法 滿二叉樹,鏈長為logn 考慮列舉lca為x,兩個鏈長h1,h2,發現x是唯一確定的!找到這個x,s減去都走左兒子的貢獻,再調整出右兒子 2 n 1 2 n,變成每一位的0...
TJOI2019 甲苯先生的線段樹(數字DP)
tjoi2019難一點的就只有這道d2t3了,前面五道我共計花了三個小時,這一道花了將近兩個小時。五個小時ak兩天tjoi不是夢 但是說實話這道題並沒有什麼水平,沒考察什麼思維方面的東西,涉及到的性質也極其偏門,天津就靠這個來選拔省隊?怕不是反向選拔,反正天津今年也一塊金牌也沒有,這個鍋省選和省選出...
TJOI2019 甲苯先生和大中鋒的字串
有個叫asuldb的神仙來嘲諷我 說這題sam水題,而且sa過不了 然後我就用sa過了 顯然是乙個height陣列上長為k的滑塊,判一下兩邊,差分一下就可以了 include cstdio include cstring include iostream include algorithm usin...