source:noip2015-shy-5
假設現在離 noip 還有 m 天,有 n 個人要去參加比賽。他們每個人都有乙個預定的訓練量 r[i] ,所以每一天他們都抓緊時間練習。但是由於條件限制,第 i 天只有 t[i] 的時間可以練習。
我們都知道,乙個人在開始幹活以前總要浪費一些時間做一些雜七雜八的事情。現在我們假定第 i 個人每天在訓練前浪費的時間是固定的,記為 d[i] 。這段浪費掉的時間過後,選手會專心致志訓練,他們會充分利用剩下的時間。然而乙個可能的情況時,乙個人還在無所事事的時候,某一天的訓練時間已經過去了,所以他那一天什麼事情都沒有做。
現在請問每個人在第幾天的時候可以完成自己的訓練任務。當然會存在志向遠大但是很懶惰的人到最後也是做不完的情況。
第一行兩個整數 n,m ,表示人數和天數 。
接下來一行 m 個整數 t[i] 。
接下來 n 行每行兩個整數 d[i],r[i] 。
一行輸出 n 個整數表示每個人在第幾天可以完成自己的工作,如果完不成,輸出 0 。
輸入 [複製]
3 3輸出4 2 5
1 3
2 5
3 4
1 3 0
【資料範圍】
對 30% 的輸入資料 :1≤n,m≤1000
對 100% 的輸入資料 :1≤n,m≤ 200000;1≤t[i]≤1000000; 0≤d[i]≤1000000;1≤r[i]≤1000000
【注意事項】
如果某人浪費的時間超過一天,不需減去負的時間
本來想用二分套主席樹寫的·····
然而tmt了一下午棄療了···
正解應該是將每天的訓練時間按t為關鍵字降序排序···將每個人按其耽誤時間d為關鍵字降序排序·····這樣做是為了消除當人的浪費時間超過某一天時帶來的影響·····
然後按照排好的序開始列舉對應的人···將t大於這個人r的訓練天數加入兩個樹狀陣列··乙個儲存總時間乙個儲存總天數·····然後對這個人二分答案即可···
#include#include#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int n=2e5+5
;struct
node1
train[n];
struct
node2
peo[n];
intn,m,ans[n];
inline
intr()
inline
bool
cmp1(node1 a,node1 b)
long
long
trsum[n],trcnt[n];
inline
bool
cmp2(node2 a,node2 b)
inline
void insertsum(int pos,int
v)inline
void insertcnt(int
pos)
inline
long
long querysum(int
pos)
inline
int querycnt(int
pos)
inline
bool check(int x,int
now)
intmain()
int le=1,ri=m,anss=0
;
while(le<=ri)
ans[peo[i].person]=anss;
} for(int i=1;i<=n;i++) cout<"";
return0;
}
筆試刷題總結
今天刷了一些筆試題,以下是刷完筆試題後看到的相關知識點的解析,做個小結。1 多型主要以兩種形式,靜態多型和動態多型,靜態多型主要實現了函式過載和運算子過載。動態多型主要實現了虛函式。虛函式是動態聯編,程式在執行的過程中確定呼叫哪乙個函式。2 int s 8 定義乙個指標陣列,該陣列中每個元素是乙個指...
Java刷題總結
public class hasstatic a.程式通過編譯,輸出結果為 x 102 b.程式通過編譯,輸出結果為 x 103 c.10行不能通過編譯.因為x星私有靜態變數 d.5行不能通過編譯.因為引用了私有靜態變數 解析 同乙個類內,private變數可以訪問,所以cd錯。由於x是static...
LeetCode刷題總結
123 4567 891011 12 元素交換 swap a 1 a 3 sort排序 sort a.begin a.end 陣列顛倒 reverse a.begin a.end 陣列元素置為0 memset a,0,a.size 陣列取值 a.push back 定義二維陣列 vector vec...