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

2021-06-20 18:31:46 字數 1173 閱讀 3342

這個被 notonlysuccess 歸類為區間合併

想來區間合併的題 pushup 不但更新的時候會用到,左右兩個孩子得到的結果也要用 pushup 處理,就換了一下pushup的形式。爽

寫著寫著。。不知不覺這巨集就變的越來越多了。

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

#define read freopen("acm.in","r",stdin)

#define ll long long

#define pii pair#define pdi pair#define mpi map::iterator

#define fst first

#define sec second

#define ms(x,d) memset(x,d,sizeof(x))

#define inf 0x3f3f3f3f

#define all(x) x.begin(),x.end()

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define max 2100000

#define root 0,n-1,1

struct node

}data[max<<2],dumy;

int num[max<<1];

void pushup(node &rt,node &ls,node &rs)

node query(int l,int r,int l,int r,int rt)

void build(int l,int r,int rt)

; return ;

}int m=(l+r)>>1;

build(lson);

build(rson);

pushup(data[rt],data[rt<<1],data[rt<<1|1]);

}int cas,n,q;

int main()

{ read;

scanf("%d",&cas);

for(int t=1;t<=cas;t++)

{scanf("%d%d",&n,&q);

for(int i=0;i

HDU 3308 線段樹合併 求最大連續子串

題目鏈結 給定一段區間求 最長連續上公升序列長度 兩個操作 q 操作區間查詢最長連續上公升子串行 u操作 單點更新 一般的區間合併問題,我算是發現了,都要維護三個基本引數 從左端開始的 從右端開始的 中間最大的 所以這個題 也不例外 維護左端開始的最長 和右端結束的最長 還有區間最長 然後 在記錄一...

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

學到兩點 1 以區間端點為開始 結束的最長.似乎在dp也常用這種思想 2 分類的時候,明確標準逐層分類,思維格式 條件一成立 else else else 上面的這種方式很清晰,如果直接想到那種情況iif 條件一 條件二 就寫,很容易出錯而且把自己搞亂,或者情況不全,我就因為這wa了幾次 3 wa了...

HDU 3308 LCIS 線段樹,連續遞增子

by cxlove 題目 給出乙個序列,兩種操作,單點更新值,以及查詢區間的最長連續遞增子串行長度 這題比較簡單,如果是求最長遞增子串行長度就難了,不需要連續就是簡單的區間合併類的線段樹了。每乙個結點要記錄包含左端點的最長連續遞增子長度,包含右端點的最長連續遞增子長度,以及整個區間的最長遞增子長度,...