51nod 1461 穩定桌 掃瞄線 線段樹

2021-08-09 19:39:10 字數 995 閱讀 5633

有一張桌子,有n個腿。第i根腿的長度是li。

現在要拿掉一些腿,使得桌子穩定,拿掉第i根腿需要di的能量。

穩定的條件是,假如拿掉若干條腿之後,桌子還有k個腿,那麼長度最長的腿的數目要超過一半。比如桌子有5根腿,那麼至少要有三根腿是最長的。另外,只有一根腿的桌子是穩定的,兩個腿的桌子想要穩定,必需長度是一樣的。

你的任務是拿掉若干腿,使得桌子穩定,並且所消耗的能量要最少。

可以列舉以多少高度為最高,顯然所有大於它的桌腿都要拿掉,並在小於它的桌腿中拿掉一些使它的數量最大,可以考慮從大到小列舉最高的高度,然後用線段樹維護求前k小(雖然可以不用線段樹)。

#include

#include

#include

#define maxn 100006

#define ll long long

using namespace std;

inline char nc()

inline int _read()

int n,tot,a[maxn],lnk[maxn],nxt[maxn],son[maxn],num[maxn];

ll ans,sum[maxn];

struct datatree[maxn*4];

void build(int p,int l,int r)

void update(int p,int t,int k)

update(p<<1,t,k);update(p<<1|1,t,k);

tree[p].sum=tree[p<<1].sum+tree[p<<1|1].sum;

tree[p].num=tree[p<<1].num+tree[p<<1|1].num;

}ll query(int p,int k)

void add(int x,int y)

int main()

printf("%lld\n",ans);

return

0;}

51Nod 1530 穩定方塊

acm模版 很巧妙的利用兩個堆來搞事情,乙個大頂堆,乙個小頂堆,就是優先佇列,維護每次能夠拆除的方塊兒,每拆除乙個向周圍擴充套件一次,並且刪除拆掉的這個方塊兒,這裡用 ma p 處理。說白了,就是乙個有趣的貪心問題,用到兩種資料結構罷了,st l include include include in...

51nod 貪心入門

有若干個活動,第i個開始時間和結束時間是 si,fi 活動之間不能交疊,要把活動都安排完,至少需要幾個教室?分析 能否按照之一問題的解法,每個教室安排盡可能多的活動,即按結束時間排序,再貪心選擇不衝突的活動,安排乙個教室之後,剩餘的活動再分配乙個教室,繼續貪心選擇 反例 a 1,2 b 1,4 c ...

51nod 迷宮問題

1459 迷宮遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的...