hdu 3308 線段樹單點更新 區間合併

2021-06-23 01:28:23 字數 992 閱讀 2990

學到兩點:

1、以區間端點為開始/結束的最長......似乎在dp也常用這種思想

2、分類的時候,明確標準逐層分類,思維格式:

條件一成立:

else

}else

else }

上面的這種方式很清晰,如果直接想到那種情況iif(條件一 &條件二)就寫,很容易出錯而且把自己搞亂,或者情況不全,,,我就因為這wa了幾次

3、wa了之後 ,嘗試列舉所有的可能,舉例子,比如這道題可以列舉所有的最值出現的位置,來驗證自己的判斷邏輯

#include #include #include #include using namespace std;

#define ls(rt) rt*2

#define rs(rt) rt*2+1

const int maxn = 100000+100;

struct node

}nodes[maxn*4];

int a[maxn];

/*void pushup(int rt)

else

nodes[rt].mx=max(nodes[ls(rt)].mx,nodes[rs(rt)].mx);

}*/void pushup(int rt)

int a=query(ls(rt),l,mid);

int b=query(rs(rt),mid+1,r);

if(nodes[ls(rt)].rxnodes[ls(rt)].rx ) )

////consecutive

//int ll = min(nodes[ls(rt)].rs,nodes[ls(rt)].r-l+1);

//int rr= min(nodes[rs(rt)].ls,r-nodes[rs(rt)].l+1);

//return ll+rr;

}int main()

else}}

return 0;

}

hdu 3308 LCIS(單點更新,區間合併)

題意 給你n個整數,有兩種操作,u a b把第a個數變成b,q a b查詢區間 a,b 的最長連續上公升序列。在查詢的時候,要注意,如果查詢的範圍是在當前區間的左右兒子裡,並且左兒子的右端點小於右兒子的左端點,那麼不能直接取左兒子的rmx加上右兒子的lmx,因為有可能查詢的範圍的長度就已經小於左兒子...

HDU 3308 線段樹。。最長連續上公升子串行

這個被 notonlysuccess 歸類為區間合併 想來區間合併的題 pushup 不但更新的時候會用到,左右兩個孩子得到的結果也要用 pushup 處理,就換了一下pushup的形式。爽 寫著寫著。不知不覺這巨集就變的越來越多了。include include include include i...

單點更新,區間查詢線段樹

線段樹的空間複雜度是4n include include include using namespace std const int maxn 100005 const int inf 0x3f3f3f3f int n,a maxn struct node 結點 tree maxn 4 樹結點儲存陣...