hdu 4893 線段樹 二分fib

2021-06-23 00:15:44 字數 845 閱讀 4614

這道題題意很清楚~就是線段樹的運用,其中的第三個操作,也就是將乙個數轉變為與這個數相鄰最小fib數;

如果直接操作,因為操作次數很多,應該會tle,我們可以在每個樹節點上加個cover變數,如果等於1,那麼表示這個區間裡的數已經是fib數了,不需要再更改了,這樣就避免時間的浪費;

標準模板**:

表示,自己敲不是re,就是tle,比賽的時候re了一下午;無解了;

#include

#include

#include

#include

typedef long long ll;

using namespace std;

const  int  maxn=55;

struct node

data[400010];

__int64 a[maxn+1];

__int64 find_near(__int64 x)    //二分找fib數

void change(int l,int r,int k)

mid=(data[k].l+data[k].r)/2;

if(r<=mid) change(l,r,k*2);

else if (l>mid) change(l,r,k*2+1);

else

data[k].sum=data[k*2].sum+data[k*2+1].sum;

if (data[k*2].cover==data[k*2+1].cover) data[k].cover=data[k*2].cover;

else data[k].cover=0;

}int main()

}return 0;

}

HDU4893 線段樹單點 區間更新

題目鏈結 題意 輸入n q。表示有n個數,初始化預設這n個數都為零,有q次操作,操作種類分為三種 1 輸入k,d,使得k位置的數加上d。2 輸入l,r,求區間 l,r 的和並輸出。3 輸入l,r,把區間 l,r 內的數都改成斐波拉契數,修改方式為使得fabs x f i 最小,如果有多個f i 滿足...

hdu 4339 線段樹 二分

題意是給你兩個字串 進行兩種操作 1 修改其中乙個字串裡的某個字元2 詢問從i起兩個字串最多由多少個是相同的 先說一下做之前的想法 我是看別人介紹樹狀陣列是看到這道題的 本也想用樹狀陣列做 沒想上去 然後就改為線段樹了 有很明顯的點更新,區間查詢,所以選擇線段樹 思路 每個節點num 存3個值 p1...

hdu 4614 線段樹 二分

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