Noip2016十連賽day3 平均數

2021-08-22 13:41:54 字數 1889 閱讀 6587

有一天,小a得到了乙個長度為n的序列。

他把這個序列的所有連續子串行都列了出來,並對每乙個子串行都求了其平均值,然後他把這些平均值寫在紙上,並對它們進行排序,最後他報出了第k小的平均值。

你要做的就是模仿他的過程。

第一行兩個整數n,k,意義如題中所述。

第二行n個正整數,即為小a得到的序列。

一行乙個實數,表示第k小的平均值,保留到小數點後4位。

6 10

3 5 4 6 1 2

3.6667

【資料範圍與約定】

對於40%的資料,n≤1000

對於100%的資料,n≤100000,k≤n*(n+1)/2,序列中的數≤10^9

這個題目非常有意思。

首先暴力n2

n

2的演算法能夠得到40分。

這種題目要求第

k k

大,二分是能夠想到的一種演算法。

但是問題就在於如何檢驗呢?

這就是這道題目的樂趣所在了。

說起二分檢測的話,分數規劃之後作差求和大於0是很有力的一種方法。

這道題就通過一些有趣的轉換達成了目的。

序列子區間和平均值小於k的個數

把當前的序列先都減去k(分數規劃的套路)

我們對於現有有序列求一下字首和,那麼區間和就可以差分之後得出了。

然後就是區間和小於0的個數。

列舉區間的右端點,這個點的貢獻就是左邊的這一段區間中加上當前值小於0的個數。

求法很多,但是我們這裡來乙個特別的。

對於兩點i,

j' role="presentation" style="position: relative;">i,j

i,j,

i i

在j' role="presentation" style="position: relative;">j

j前面,當且僅當su

m[j]

−sum

[i−1

]<

0 sum

[j]−

sum[

i−1]

<

0時,這一段區間的和小於0 那麼s

um[i

−1] sum

[i−1

]和su

m[j]

s um

[j

]是一對逆序對

問題就轉化為了求逆序對的個數

回到題目。

二分答案之後求出有多少個區間的平均值小於答案即可。

時間複雜度o(

nlog

2n) o(n

log2

n)

#include

#include

#include

#include

using

namespace

std;

const

double eps=1e-6;

inline

const

int read()

int n,k,a[100005],low[100005];

struct node p[100005];

inline

bool

operator

< (const node &a,const node &b)

inline

int ask(int x)

inline

bool check(double lim)

return recint main()

printf("%.4lf",ans);

return

0;}

NOIp2016十連測第五場T2 walk 題解

傳送門 最近由於參加noi集訓,好久沒有更新部落格啦tot 正解要從第二種部分分思路想。這個思路為什麼是o n max w o n times max w o n max w 的?因為每次求森林最長鏈時其實真正有用的點 邊並不多,而演算法將大量時間花費在了無用點 孤立點 上。如果找有用邊時順便記錄有...

NOIP2016複賽模擬賽 朋友

問題描述 mxy 即將前往新世界。在前往新世界的過程中,ta 遇見了兩種人。一種是只和lowb 做朋友,即當且僅當自己 的能力值大於對方時他們會成為朋友,另一種是大神我們做朋友,即當且僅當自己的能力 值小於對方時他們會成為朋友。現在告訴你兩種人的能力值。請你計算一共有多少對友好關係。輸入 每組測試資...

NOIP2016模擬賽No 1 牛宮

題目描述a p 神牛準備給自己蓋一座很華麗的宮殿。於是,他看中了一塊n m 的矩形空地。空地中每個格仔都有自己的海拔高度。ap 想讓他的宮殿的平均海拔在海平面之上 假設海平面的高度是0 平均數都會算吧?而且,ap 希望他的宮殿盡量大,能夠容納更多的人來膜拜他。請問ap 的宮殿最後會有多大?輸入 第一...