題目:click
題意:操作是1,則從a開始插花f個,多了丟棄,沒有瓶子可放則輸出。
2的話,區間內的所有花丟出。
用二分去確定操作1中的起始位置以及終止位置,其他的線段樹維護。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3f
#define max_len 50005*4
using
namespace std;
typedef
long
long ll;
const
int maxn =
262144*2
+10;const
double pi = std::
acos(-
1.0)
;int n,m;
struct a tree[max_len]
;void
build_tree
(int p,
int l1,
int r1)
int mid=
(l1+r1)
>>1;
build_tree
((p<<1)
,l1,mid)
;build_tree
((p*2+
1),mid+
1,r1)
; tree[p]
.w=tree[p*2]
.w+tree[p*2+
1].w;}
void
pushdown
(int p)
}void
update
(int p,
int l1,
int r1,
int val)
pushdown
(p);
int mid=
(tree[p]
.l+tree[p]
.r)/2;
if(l1<=mid)
if(r1>mid)
tree[p]
.w=tree[p*2]
.w+tree[p*2+
1].w;}
intquery
(int p,
int l1,
int r1)
pushdown
(p);
int mid=
(tree[p]
.l+tree[p]
.r)/2;
int res=0;
if(l1<=mid)
if(r1>mid)
return res;
}int
solve
(int x,
int cnt)
else
l=mid+1;
}return ans;
}int
main()
else
}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...
hdu4614 二分 線段樹
題意 給你1 n的花瓶 剛開始全是空的,現在有兩種操作,1 從花瓶a開始插入b朵花 如果不能插進去 輸出字串 否則輸出最多插入的起點和終點 結構體陣列num i 表示節點i空瓶的數目 線段樹 開始deal函式對整個樹初始化,update 更新函式 find 查詢區間有多少個空瓶 對於操作1 關鍵點是...