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