hdu4614 二分 線段樹

2021-06-29 05:43:30 字數 2734 閱讀 2567

題意:給你1-n的花瓶   ,剛開始全是空的,現在有兩種操作,

1:從花瓶a開始插入b朵花          如果不能插進去  輸出字串  否則輸出最多插入的起點和終點;

結構體陣列num【i】表示節點i空瓶的數目

線段樹   開始deal函式對整個樹初始化,update()更新函式 find()查詢區間有多少個空瓶;     對於操作1    關鍵點是找到起點和終點   這裡用二分  在【a,n】進行二分,

先二分起點       注意左右區間的變換(wa了好多次==)   然後在起點和n之間二分終點   最後更新  輸出     對於操作2     直接查詢即可;

#include#include#includeusing namespacestd;#define ll(x) (x<<1)

#define rr(x) ((x<<1)|1)

structnodenum[50000*4];

intdeal(

intl,

intr,

intpoint)

intupdate(

intl,

intr,

intleft,

intright,

intpoint,

intk)

intmid=(l+r)/2;

if(num[point].cont==r-l+1)

if(num[point].cont==0)

if(right<=mid)

else if

(left>mid)

else

num[point].cont=num[ll(point)].cont+num[rr(point)].cont;

return0;

}intfind(

intl,

intr,

intleft,

intright,

intpoint)

returnsum;

}int

main

()elseleft=mid+1;

}if(cont<=b)

elseright=mid-1;

}//end=right;

}

else

elseleft=mid+1;

}//end=left;

}printf("%d %d\n",star-1,end-1);update(1,n,star,end,1,-1);}}

else

}printf("\n");

}return0;

}

hdu 4614 線段樹 二分

這題感覺有點坑,陣列越界了,看來以後陣列要盡可能的開大一些了。include include include include include using namespace std define maxn 60005 struct ee tree maxn 4 int n,m void build ...

hdu 4614 線段樹 二分

題意 n個花瓶,m個操作,花瓶裡面有的有花,有的是空的。1操作是從a開始往右放b朵花,花瓶有了的不放,跳過,直到a右邊都放滿了花,多餘的扔了。輸出本次放花的起始位置 求和操作可以用線段樹解決,操作1的放置的起始位置,通過二分求就可以 include include include include i...

HDU 4614(線段樹 二分)

題目 click 題意 操作是1,則從a開始插花f個,多了丟棄,沒有瓶子可放則輸出。2的話,區間內的所有花丟出。用二分去確定操作1中的起始位置以及終止位置,其他的線段樹維護。include include include include include include include include...