BZOJ 4548 小奇的糖果

2021-08-01 16:59:46 字數 1316 閱讀 1286

有 n 個彩色糖果在平面上。小奇想在平面上取一條水平的線段,並拾起它上方或下方的所有糖果。求出最多能夠拾

起多少糖果,使得獲得的糖果並不包含所有的顏色。

包含多組測試資料,第一行輸入乙個正整數 t 表示測試資料組數。

接下來 t 組測試資料,對於每組測試資料,第一行輸入兩個正整數 n、k,分別表示點數和顏色數。

接下來 n 行,每行描述乙個點,前兩個數 x, y (|x|, |y| ≤ 2^30 - 1) 描述點的位置,最後乙個數 z (1 ≤ z ≤

k) 描述點的顏色。

對於 100% 的資料,n ≤ 100000,k ≤ 100000,t ≤ 3

對於每組資料在一行內輸出乙個非負整數 ans,表示答案

110 3

1 2 3

2 1 1

2 4 2

3 5 3

4 4 2

5 1 2

6 3 1

6 7 1

7 2 3

9 4 2

5by hzwer

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

樹狀陣列+鍊錶~

注意xr[i]要先設定為n+1!

#include#include#include#includeusing namespace std;

int t,n,k,ans,x[100002],y[100001],len1,len2,c[100002],fi[100002],xl[100002],xr[100002];

struct nodea[100001];

bool operator < (node u,node v)

while(ch>='0' && ch<='9')

return x*f;

}void add(int u,int v)

int cal(int u)

void update(int l,int r)

void solve()

for(int i=1;i<=k;i++) update(x[fi[i]]+1,n+1);

sort(a+1,a+n+1,cmp);

for(int i=1,j=1;i<=n;i++) }

int main()

for(int i=1;i<=n;i++) x[i]=a[i].x;

solve();

for(int i=1;i<=n;i++) a[i].y*=-1;

solve();

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

} return 0;

}

BZOJ4548 小奇的糖果

試題描述 有 n 個彩色糖果在平面上。小奇想在平面上取一條水平的線段,並拾起它上方或下方的所有糖果。求出最多能夠拾起多少糖果,使得獲得的糖果並不包含所有的顏色。輸入包含多組測試資料,第一行輸入乙個正整數 t 表示測試資料組數。接下來 t 組測試資料,對於每組測試資料,第一行輸入兩個正整數 n k 分...

BZOJ 4548 小奇的糖果

有 n 個彩色糖果在平面上。小奇想在平面上取一條水平的線段,並拾起它上方或下方的所有糖果。求出最多能夠拾起多少糖果,使得獲得的糖果並不包含所有的顏色。包含多組測試資料,第一行輸入乙個正整數 t 表示測試資料組數。接下來 t 組測試資料,對於每組測試資料,第一行輸入兩個正整數 n k 分別表示點數和顏...

題解 BZOJ4548 小奇的糖果

本文同步在學弟zcdhj的個人部落格發布,審核需要一段時間.傳送門考慮題目中獲得的糖果並不包含所有的顏色這句話,發現相當於我們可以直接選取某乙個顏色強制不能選 這樣子一定最優 然後就可以考慮分開解決上面和下面.先考慮下面 列舉顏色然後搞區間 不能包含這一種顏色 按照橫座標的順序刪點,然後再看刪除的點...