給你n個區間,每個區間為[a,b],每個區間取c個數構成乙個集合,求集合最小容量
把區間按b排序,從第乙個區間開始取,從後往前取,這樣盡可能和後面的區間重複
另外如果我們發現當前區間取得個數已經超過了c,那麼只需要讓之前區間換就行,而總數是不變的,所以不用更新答案
求當前區間已經取了多少個數用樹狀陣列
1 #include 2 #include3 #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...