本文同步在學弟zcdhj的個人部落格發布,審核需要一段時間.
傳送門考慮題目中獲得的糖果並不包含所有的顏色這句話,發現相當於我們可以直接選取某乙個顏色強制不能選(這樣子一定最優).
然後就可以考慮分開解決上面和下面.
先考慮下面:
列舉顏色然後搞區間(不能包含這一種顏色)
按照橫座標的順序刪點,然後再看刪除的點的顏色的區間是否會被更新
以上操作的話,查詢區間可以用雙向鍊錶,區間求點(和)可以使用樹狀陣列.
差不多就這樣子了.
#include#include#include#include#include#include#includeusing namespace std;
inline int gi()
while(ch>='0' && ch<='9')
return f*sum;
}int ans,n,k,c[500010],x[500010],l[500010],r[500010],last[500010],b[500010];
struct nodep[500010];
int lowbit(int x)
void add(int x,int d)
int query(int x)
bool cmp1(node a,node b)
void solve()
for(int i=1;i<=k;i++)update(x[last[i]]+1,n+1);
sort(p+1,p+n+1,cmp2);
for(int i=1,j=1;i<=n;i++)
}int main()
for(int i=1;i<=n;i++)b[i]=p[i].x;
sort(&b[1],&b[n+1]);
for(int i=1;i<=n;i++)
solve();
for(int i=1;i<=n;i++)p[i].y=-p[i].y;
solve();
printf("%d\n",ans);
} return 0;
}
BZOJ 4548 小奇的糖果
有 n 個彩色糖果在平面上。小奇想在平面上取一條水平的線段,並拾起它上方或下方的所有糖果。求出最多能夠拾 起多少糖果,使得獲得的糖果並不包含所有的顏色。包含多組測試資料,第一行輸入乙個正整數 t 表示測試資料組數。接下來 t 組測試資料,對於每組測試資料,第一行輸入兩個正整數 n k,分別表示點數和...
BZOJ4548 小奇的糖果
試題描述 有 n 個彩色糖果在平面上。小奇想在平面上取一條水平的線段,並拾起它上方或下方的所有糖果。求出最多能夠拾起多少糖果,使得獲得的糖果並不包含所有的顏色。輸入包含多組測試資料,第一行輸入乙個正整數 t 表示測試資料組數。接下來 t 組測試資料,對於每組測試資料,第一行輸入兩個正整數 n k 分...
BZOJ 4548 小奇的糖果
有 n 個彩色糖果在平面上。小奇想在平面上取一條水平的線段,並拾起它上方或下方的所有糖果。求出最多能夠拾起多少糖果,使得獲得的糖果並不包含所有的顏色。包含多組測試資料,第一行輸入乙個正整數 t 表示測試資料組數。接下來 t 組測試資料,對於每組測試資料,第一行輸入兩個正整數 n k 分別表示點數和顏...