中位數及帶權中位數題集

2022-05-31 06:06:07 字數 1576 閱讀 4342

codevs 3625

1 #include 2

using

namespace

std;

3int x[11111], y[11111];4

intmain()

5

code

codeforces round #512 (div. 2, based on technocup 2019 elimination round 1) f. putting boxes together

題解真的又寫的非常清楚了……

自己在想的時候,確實想到肯定有乙個塊不動,其他的動,我們只需要去移那些貢獻小的,我猜是最重的那個,但自己寫了組樣例就推翻了。

題解講,用$s(l,r)$表示將索引$(l,r)$物品移動一步的花費,不動的那塊應該滿足$s(l,k-1)≤ \frac$,$s(l,k)> \frac$。q神說是熟知的帶權中位數問題。

求$k$的過程,可以用二分+樹狀陣列解決。

求得$k$後,因為$k$是固定不動的,如果$ik$類似。

真的是慎用除法,不然都不知道怎麼死的……

#include using

namespace

std;

typedef

long

long

ll;const ll mod = 1e9 + 7

;const

int maxn = 2e5 + 50

;ll a[maxn], w[maxn];

ll c[maxn];

intn, q;

void add1(int

x, ll v)

}ll query1(

intx)

return

res;

}ll calc(

int l, int

r)ll d[maxn];

void add2(int

x, ll v)

}ll query2(

intx)

return

res;

}ll calc2(

int l, int

r)int

main()

else

if(calc(l, mid - 1) * 2ll > s && calc(l, mid) * 2ll >s)

else

}///得到k後,開始計算花費

ll ans = (calc(l, k - 1) % mod * a[k] % mod - calc2(l, k - 1) + mod) %mod;

ans = (ans + (calc2(k + 1, r) - calc(k + 1, r) % mod * a[k] % mod + mod) % mod) %mod;

printf(

"%lld\n

", ans);

}else

}int ccc = 0

;

return0;

}

code

sgu 114

poj 1723 soldiers

poj 1160

zoj 1196

中位數及帶權中位數問題

資訊學競賽總是時不時與數學產生微妙的關係,中位數及帶權中位數問題有時常常成為解題的關鍵,今日有時間,所以梳理一下。先從一到簡單的題看起 士兵站隊問題 在乙個劃分成網格的操場上,n個士兵散亂地站在網格點上。網格點由整數座標 x,y 表示。士兵們可以沿網格邊上 下 左 右移動一步,但在同一時刻任一網格點...

帶權中位數

話說在3085年,外星人打算來入侵地球,這個訊息被我國的情報部門秘密截獲,於是便打算聯絡世界各個國家,一 起研究商量對策。由於每個國家所需派的技術員人數不同,所以目前無法決定到底要在哪個國家設定個研究所進行 研究,幸運的是所有國家都在一條直線上,現在知道每個國家與我國的距離和該國的研究員人數。請你為...

中位數的中位數

參照王曉東的演算法設計 中位數的中位數,即將一串數分成n段,求其排好序了的中間那個數,再把這些所有中位數再求一次中位數。for int i 0 i r p 4 5 i 找中位數的中位數,r p 4即上面所說的n 5 int x lineselect a,p,p r p 4 5,r p 4 10 線性...