原題鏈結
題意:給定一些區間,每個區間裡必須取ci個數,這些數組成乙個集合z,求z的最少的元素數
思路:由於如果兩個區間如果有重複取的元素,那麼這個元素一定是在左邊的這個區間的最右邊的那些元素。所以我們按照區間的右邊界排序後,總是如果當前區間還需要取數,那麼就從右往左取還沒有被取的數即可。然後就可以用線段樹來維護一段區間內已經被取走的數的總數。這樣問題的複雜度就降到了o(nlogn)的程度了
#include #include #include #include using namespace std;
const int maxn = 50000 + 10;
typedef struct line
line;
line a[maxn];
bool cmp(line x,line y)
} }cout << res << endl;
return 0;
}
差分約束 poj 1201 Interval
差分約束 poj 1201 又是一道vector tle。確實很好的差分約束。很好的差分約束,注意隱含條件 0 d i 1 d i 1 題目保證了沒負圈。include include include using namespace std define n 50005 define inf 100...
POJ 1201 樹狀陣列
給你n個區間,每個區間為 a,b 每個區間取c個數構成乙個集合,求集合最小容量 把區間按b排序,從第乙個區間開始取,從後往前取,這樣盡可能和後面的區間重複 另外如果我們發現當前區間取得個數已經超過了c,那麼只需要讓之前區間換就行,而總數是不變的,所以不用更新答案 求當前區間已經取了多少個數用樹狀陣列...
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 ...