題目
題解
部分分的做法這裡就不說了 相信聰明的你一定會的
考試的時候肯定是不會做了 之前翻了一些題解慢慢理解
前置芝士
線段樹(樹狀陣列)、帶權中位數
帶權中位數/8517609#2
我們要取第乙個滿足字首和>=[(sum+1)/2]可以用線段樹或者樹狀陣列查詢
int query(int id, int l, int r, long本題加上了限制某些位置不能取那麼假設第乙個滿足字首和》=[(sum+1)/2]的位置為mid 則答案就是在[1,mid]中取能取到的最右端,[mid,n]中取能取到的最左端 再比較兩者的值取最小long
k)
具體的 我們可以用線段樹維護乙個區間可以取到的最左端和最右端以及整個區間移到區間左端點的值和移到區間右端點的值
對於查詢 就是查詢[1,mid]中能取到的最右端以及[mid,n]中取能取到的最左端再比較兩者的值的最小值就是最後答案 如果兩者都不存在 則輸出-1
貼**
#include using也有樹狀陣列的做法 博主覺得線段樹比較容易理解 其他做法留給聰明的讀者自行學習namespace
std;
const
int n = 2e5 + 5
;const
long
long inf =1e17;
struct
t t[n << 2
];int
n, m;
struct
a ;int
a[n];
void pushup(int id, int l, int
r) void pushdown(int id, int l, int
r)
else
t[id].tag = -1;}
void add(int id, int l, int r, int pos, long
long
y) pushdown(id, l, r);
int mid = l + r >> 1
;
if (pos <=mid)
add(id
<< 1
, l, mid, pos, y);
else
add(id
<< 1 | 1, mid + 1
, r, pos, y);
pushup(id, l, r);
}void build(int id, int l, int
r)
int mid = l + r >> 1
; build(id
<< 1
, l, mid);
build(id
<< 1 | 1, mid + 1
, r);
pushup(id, l, r);
}void modify(int id, int l, int r, int x, int y, bool
b) pushdown(id, l, r);
int mid = l + r >> 1
;
if (x <=mid)
modify(id
<< 1
, l, mid, x, y, b);
if (y >mid)
modify(id
<< 1 | 1, mid + 1
, r, x, y, b);
pushup(id, l, r);
}int query(int id, int l, int r, long
long
k) a get_r(
int id, int l, int r, int x, int
y) ;
if (l ==r)
return ans = a;
pushdown(id, l, r);
int mid = l + r >> 1
;
if (t[id << 1 | 1].lb && t[id << 1 | 1].lb <=y)
else
}a get_l(
int id, int l, int r, int x, int
y) ;
if (l ==r)
return ans = a;
pushdown(id, l, r);
int mid = l + r >> 1
;
if (t[id << 1].rb && t[id << 1].rb >=x)
else
}int
main()
}
題解 餐巾計畫問題
傳送門 乙個餐廳在相繼的 nnn 天裡,每天需用的餐巾數不盡相同。假設第 iii 天需要 rir iri 塊餐巾 i 1,2,n 餐廳可以購買新的餐巾,每塊餐巾的費用為 ppp 分 或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分 或者送到慢洗部,洗一塊需 nnn 天 n mn mn m ...
題解 餐巾計畫問題
orz argent 一定要注意不要調到題目裡的坑里來了,要記得脫離實際 大霧 建模方法 我覺得沒什麼好講的,真的是靈感問題,此外,這個問題可以直接無源匯上下界網路流。但是我不會 graph lr 淨1 w r,c 0 t 淨2 w r,c 0 t 淨3 w r,c 0 t 淨4 w r,c 0 t...
工作計畫 題解
mark 在無意中了解到了 elf 的身世。在和 james 商量過之後,好心的他們 打算送 elf 返回故鄉。然而,去往 gliese 的飛船票價高的驚人,他們暫時還付 不起這筆費用。經過一番考慮,mark 打算去額外做一些工作來獲得收入。經過一番調查,mark 發現有 n 個工作可以做。做第 i...