貪心 偏序 treap

2022-06-09 06:27:10 字數 1646 閱讀 4561

貪心[偏序+treap]

c. booking system

題意:乙個餐館,n批顧客,每批顧客都想要坐在同一張桌子上,人數為c,將付的錢是p,m張桌子,有容量desk_c,得到最多的錢,輸出兩兩配對結果;

題解:貪心,有兩種貪心策略:

1.讓桌子選,根據容量從小到大依次選,選可以滿足要人數求中錢最多的

2.讓人選,錢從大到小,選可以滿足人數要求的桌子容量最小的;[最後一句的要求針對同一物件,可以二分實現]

顯然,兩種是一樣的,而後者好寫。

注意點:set預設小根堆,否則multiset>s;

#includeusing namespace std;

typedef long long ll;

namespace io

while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=gc;

x*=f;

return;

}templateinline void write(t x=0)

}using io::read;

using io::write;

const int maxn=1e6+5;

struct kunden

}k[maxn];

struct desk);

if(it!=s.end())

);s.erase(it);}}

sort(vc.begin(),vc.end());

cout《牛客小白月賽29-a.進攻

題意:

scimoon 率領的反叛軍已經做好了準備

他的手下有 n 個戰機,每架戰機有乙個破壞力 a

帝國有 m 個基地,每個基地有乙個防禦值 d,基地有乙個價值 v

若乙個戰機的攻擊力嚴格大於基地的防禦值,則可以破壞該基地,得到這個基地的價值 v

帝國的後備資源很多,乙個基地可以被反覆破壞

每架戰機最多只能選擇乙個基地攻擊,當然也可以不攻擊[價值可以是負數]

求能獲得的最大貢獻

題解:兩種貪心策略

1.讓戰機來選,選擇可以破防的價值最大的

3.讓基地來選,基地按照價值從大到小,每次選擇剩下的中可以攻破自己的所有戰機,產生的貢獻是選擇的戰機數量*v

#includeusing namespace std;

namespace io

while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=gc;

x*=f;

return;

}templateinline void write(t x=0)

}using io::read;

using io::write;

typedef long long ll;

const int maxn=1e7+100;

#define v first

#define d second

ll a[maxn];pairb[maxn];

int main()

if(t==1) break;

}printf("%lld\n",sum);

}

等價,偏序和全序

等價 設 r 是某個集合 a 上的乙個二元關係。若 r 滿足以下條件 自反性 對稱性 傳遞性 則稱 r 是乙個定義在 a 上的等價關係。習慣上會把等價關係的符號由 r 改寫為 例如,設 上的關係r 如下 其中 與 y模 3 同餘,即 x 除以 3 的餘數與 y 除以 3 的餘數相等。例子有 1r4,...

bitset做多維偏序

很久以前就聽說這個大名鼎鼎的東西 暴力 了,現在才去寫。其實很簡單,對每一維排序,從左到右掃,維護乙個bitset表示這位之前的某個點是否出現 即出現則該位為1否則0 查詢某個數時則在每一維的排序完陣列二分找到最右邊 這個數這一維權值的位置,取出該位的bitset,將每一維的bitset與起來即可得...

學習筆記 多維偏序

一般情況下,我們比較乙個數大小,就是ai aj即可,而在上公升子串行中,當i j並且ai aj的時候,才可以認為i這位的數大於j這位的數。這就是乙個二維偏序。類似的,有n個數,每個數m個屬性,乙個數比另乙個數大,當且僅當這個數的所有屬性都大於另乙個數。這就是乙個m維偏序。對於三維偏序,可以用cdq分...