BZOJ 2243 樹鏈剖分 線段樹

2021-07-28 06:37:28 字數 1453 閱讀 4429

#include #define n 101000

#define frei freopen("in.txt","r",stdin)

#define freo freopen("out.txt","w",stdout)

#define mem(a,b) memset(a,b,sizeof(a))

#define lson root<<1

#define rson root<<1|1

#define mid int mid=(l+r)>>1

#define inf 0x3f3f3f3f

using namespace std;

int n,m,k,siz[n],fa[n],son[n],cnt,f[n],invf[n],dep[n],tp[n],ecnt,ans,res,rr;

int node[n];

struct edge ;

edge e[n<<2];

int head[n],mark[n<<2];

struct tree ;

tree seg[n<<2];

void add(int u,int v) ;

head[u]=ecnt++;

}void initsplit()

void dfs1(int u,int father)

mid;

push_down(root,l,r);

update(lson,l,mid,ql,qr,val);

update(rson,mid+1,r,ql,qr,val);

push_up(root,l,r);

}void query(int root,int l,int r,int ql,int qr)

ans+=seg[root].cnt;

if(rr==seg[root].l) ans--;

rr=seg[root].r;

return ;

}mid;

push_down(root,l,r);

query(lson,l,mid,ql,qr);

query(rson,mid+1,r,ql,qr);

push_up(root,l,r);

}int cloquer(int root,int l,int r,int ql,int qr)

mid;

push_down(root,l,r);

tmp+=cloquer(lson,l,mid,ql,qr);

tmp+=cloquer(rson,mid+1,r,ql,qr);

push_up(root,l,r);

return tmp;

}int main() else }}

}

變數命名是關鍵啊  很早寫完改好了 一直出錯 原來是函式體裡的乙個變數和全域性變數重名了 一直沒發現 好累 浪費了超多的時間  好好注意

BZOJ2243 樹鏈剖分 線段樹)

problem 染色 bzoj2243 題目大意 給定一顆樹,每個節點上有一種顏色。要求支援兩種操作 操作1 將a b上所有點染成一種顏色。操作2 詢問a b上的顏色段數量。解題分析 樹鏈剖分 線段樹。開乙個記錄型別,記錄某一段區間的資訊。l 表示區間最左側的顏色 r 表示區間最右側的顏色 sum ...

bzoj2243染色 樹鏈剖分 線段樹

time limit 20 sec memory limit 512 mb submit 8230 solved 3073 submit status discuss 給定一棵有 n個節點的無根樹和 m個操作,操作有2類 1 將節點 a到節點 b路徑上所有點都染成顏色c 2 詢問節點 a到節點 b路...

bzoj2243 染色 樹鏈剖分 線段樹

解題思路 先鏈剖。維護線段樹時每個節點維護三個值 lc 左端點顏色 rc 右端點顏色 cnt 區間中顏色段數量 注意每次合併區間時 詳見 中update,query,query函式 若左區間rc等於右區間lc是結果要減1 修改時打標記即可,注意tag初始要賦值為 1,因為有color為0的情況。in...