POJ 1201 樹狀陣列

2021-09-02 23:55:41 字數 1278 閱讀 7300

給你n個區間,每個區間為[a,b],每個區間取c個數構成乙個集合,求集合最小容量

把區間按b排序,從第乙個區間開始取,從後往前取,這樣盡可能和後面的區間重複

另外如果我們發現當前區間取得個數已經超過了c,那麼只需要讓之前區間換就行,而總數是不變的,所以不用更新答案

求當前區間已經取了多少個數用樹狀陣列

1 #include 2 #include 

3 #include 4 #include 5 #include 6 #include 7 #include

8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15

using

namespace

std;

16#define rep(i,a,n) for (int i=a;i17

#define per(i,a,n) for (int i=n-1;i>=a;i--)

18#define all(x) (x).begin(),(x).end()

19#define pb push_back

20#define mp make_pair

21#define lson l,m,rt<<1

22#define rson m+1,r,rt<<1|1

23 typedef long

long

ll;24 typedef vectorvi;

25 typedef pairpii;

26const ll mod = 1e9 + 7;27

const

int inf = 0x3f3f3f3f;28

const

int maxn = 5e4 + 7;29

//head

3031

struct

sec

37}s[maxn];

3839

intn;

40int

bit[maxn];

41int

used[maxn];

4243

void add(int i, int

x) 46

47int sum(int

i) 52

53int

main()

70 tail--;71}

72}73}

74 cout << ans <75return0;

76 }

poj 1201 差分約束

傳送門 題意 ai到bi間至少有ci個元素,問所有數中至少有多少元素。額。這樣好像說不清楚,我拿樣例說下吧。3到7之間至少有3個元素,8到10之間至少有3個元素,6到8之間至少有1個元素,1到3之間至少有1個元素,10到11之間至少有1個元素。最少情況如下 1 2 3 4 5 6 7 8 9 10 ...

POJ1201(貪心演算法)

給出n個閉整數區間 ai,bi 和n個整數c1,cn。編寫乙個程式 從標準輸入讀取間隔的數目 它們的端點和整數c1 cn,計算具有區間 ai,bi 的至少ci公共元素的整數集z的最小大小,對於每乙個i 1,2,n,將答案寫入標準輸出。輸入輸入的第一行包含整數n 1 n 50000 間隔數。下面n行描...

差分約束(poj 1201

這裡簡要記一下差分約束。所謂差分約束,指的是由a b c這種不等式組組成的約束系統。一般的線性規劃問題可以用單純形法解決,但是這種特殊情況可以借助最短路演算法解決。記源點到v的最短路為d v 從u到v的最短路為d u,v 差分約束的最短路做法基於最短路的以下特點 對於沒有負圈的圖,任意兩點d u d...