NOIP模擬賽 隊爺的新書

2022-03-01 06:04:47 字數 1489 閱讀 8941

隊爺即將出版新書,以記錄他輝煌的虐題生涯。。。

有 n 家出版社對這本書表示了興趣,並願意給隊爺支付 p∈[min_pay,max_pay]的報酬來得到這本書的出版權,每家出版社的min_pay 和 max_pay 是不一樣的。

現在隊爺希望你幫他找出乙個報酬值 p,使得他獲得的總報酬最多。(每乙個 min_pay<=p<=max_pay 的出版社都會付給隊爺 p的報酬)

第一行為乙個整數 n。

接下來 n 行每行 2 個整數 min_payi 和 max_payi,為第 i 家出版社願支付的報酬範圍。

只有乙個整數 ans,為最大總報酬。34

1 32 4

3 54 7

當 p=4 時,有 3 家出版社會給出報酬,此時最大。

對於 20%的資料,1<= min_pay,max_pay<=10000;

對於 40%的資料,1<=n<=1000,1<= min_pay,max_pay<=10^6;

對於 100%的資料,1<=n<=100000,1<= min_pay,max_pay<=10^9。

因為這是閉區間,最後的答案一定在區間端點上,其實這個和劉汝佳書上的掃瞄線法很像,把左右端點看成乙個事件,只有遇到端點時,答案才會變化,由於這個是閉區間所以遇到端點答案是會增加的,所以兩個端點(不一定非得是左右端點)之間的點一定沒有端點優。其實可以換乙個思路想,其實每個區間都會給區間的每乙個點的權值增加1,由於是單點查詢,所以就可以用差分維護。但max_pay太大了,就可以對區間左右的端點離散化之後差分。

#include#include

#include

#include

using

namespace

std;

const

int n=200010

;inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}int n,t[n],tot,s[n]; long

long

ans;

struct

nodea[n],b[n];

intmain()

sort(t+1,t+2*n+1

);

int m=unique(t+1,t+2*n+1)-(t+1

);

for(int i=1;i<=n;++i)

for(int i=1;i<=n;++i)

++s[b[i].x],--s[b[i].y+1

];

for(int i=1;i<=m;++i) s[i]+=s[i-1

];

for(int i=1;i<=m;++i)

if(s[i]*1ll*t[i]>ans) ans=s[i]*1ll*t[i];

printf(

"%lld\n

",ans);

return0;

}

2015 10 31的NOIP模擬賽

這是noip前的最後一周了。第一題是個組合數學的問題,規模不算太大。但第一反應就直接dp了,o n 2 的複雜度,始終想不到優化。本來看著1 3 4 6 10 15一串串數覺得多熟悉的,就是想不起來那是組合數。最後只有80分 第二題算是基本想到了吧,但是忽略了乙個問題 我的想法是每行0的個數要麼是當...

noip模擬賽 密碼

表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...

NOIP模擬賽 老師

題目描述 一座有n層的教學樓裡有一些學生,第i 0 i n 層有studentsi個學生。你被給定了乙個數k,如果第i層有x個學生,那麼這一層需要 x k 個老師。你可以調整每個學生的樓層,但是每個學生至多只能調整一層,就是說第i層的學生只能去第i 1層 如果有的話 第i層 第i 1層 如果i 1 ...