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