HDU 4614(線段樹 二分)

2021-10-06 06:37:46 字數 1760 閱讀 8337

題目: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 關鍵點是...