洛谷P2073 送花 Treap

2021-08-13 04:17:50 字數 2021 閱讀 2213

小明準備給小紅送一束花,以表達他對小紅的愛意。他在花店看中了一些花,準備用它們包成花束。

這些花都很漂亮,每朵花有乙個美麗值w,**為c。

小明一開始有乙個空的花束,他不斷地向裡面新增花。他有以下幾種操作:

操作 含義

1 w c 新增一朵美麗值為w,**為c的花。

3 小明覺得當前花束中最便宜的一朵花太廉價,不適合送給小紅,所以刪除最便宜的一朵花。

2 小明覺得當前花束中最貴的一朵花太貴,他心疼自己的錢,所以刪除最貴的一朵花。

-1 完成新增與刪除,開始包裝花束

若刪除操作時沒有花,則跳過刪除操作。

如果加入的花朵**已經與花束中已有花朵**重複,則這一朵花不能加入花束。

請你幫小明寫乙個程式,計算出開始包裝花束時,花束中所有花的美麗值的總和,以及小明需要為花束付出的總**。

輸入格式:

若干行,每行乙個操作,以-1結束。

輸出格式:

一行,兩個空格隔開的正整數表示開始包裝花束時,花束中所有花的美麗值的總和。以及小明需要為花束付出的總**。

輸入樣例#1:

1 1 1

1 2 5

21 3 3

31 5 2

-1

輸出樣例#1:

8 5

對於20%資料,運算元<=100,1<=w,c<=1000。

對於全部資料,運算元<=100000,1<=w,c<=1000000。

經典 平衡樹 問題,用 treap 或 splay 都可以。

但是我做這題用了4天。。。

第一天:(re 0)*4

第二天:(re 0)*2+(re 60)*2

第三天:(wa 0)*2+(wa 40)*3

第四天:(wa 0)*1+(wa 40)*1+(ac 100)*1

實在是喪心病狂的題目。。。

注意:不要將 操作2 與 操作3 弄反,題目有毒。。。

附上苦心敲出的ac**:

#include#include#includeusing namespace std;

struct node

};node* rt;

inline int read()

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

return date*w;

}void maintain(node* &u)

if(u->son[1]!=null)

}void turn(node* &u,int f)

bool insert(node* &u,int w,int c)

else if(u->v==c)return false;

int y=c>u->v?1:0;

bool f=insert(u->son[y],w,c);

if(u->son[y]->w>u->w)turn(u,y^1);

if(u!=null)maintain(u);

return f;

}void remove(node* &u,int x,int y)

else

} else

if(u!=null)maintain(u);

return;

} u->sum1-=x;u->sum2-=y;

if(xv)remove(u->son[0],x,y);

else if(x>u->v)remove(u->son[1],x,y);

if(u!=null)maintain(u);

}void find(node* u,int k,int &x,int &y)

int main()

if(m==0)continue;

m--;

find(rt,(x==3?1:0),y,z);

remove(rt,y,z);

} if(rt==null)printf("0 0\n");

else printf("%d %d\n",rt->sum2,rt->sum1);

return 0;

}

洛谷 P2073 送花 Treap

題目背景 小明準備給小紅送一束花,以表達他對小紅的愛意。他在花店看中了一些花,準備用它們包成花束。題目描述 這些花都很漂亮,每朵花有乙個美麗值w,為c。小明一開始有乙個空的花束,他不斷地向裡面新增花。他有以下幾種操作 操作含義 1 w c 新增一朵美麗值為w,為c的花。3 小明覺得當前花束中最便宜的...

洛谷P2073 送花

小明準備給小紅送一束花,以表達他對小紅的愛意。他在花店看中了一些花,準備用它們包成花束。這些花都很漂亮,每朵花有乙個美麗值w,為c。小明一開始有乙個空的花束,他不斷地向裡面新增花。他有以下幾種操作 操作 含義 1 w c 新增一朵美麗值為w,為c的花。3 小明覺得當前花束中最便宜的一朵花太廉價,不適...

洛谷P2073 送花

小明準備給小紅送一束花,以表達他對小紅的愛意。他在花店看中了一些花,準備用它們包成花束。這些花都很漂亮,每朵花有乙個美麗值w,為c。小明一開始有乙個空的花束,他不斷地向裡面新增花。他有以下幾種操作 操作 含義 1 w c 新增一朵美麗值為w,為c的花。3 小明覺得當前花束中最便宜的一朵花太廉價,不適...