#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...