大體思路很簡單,用線段樹維護區間操作,詢問便是區間查詢即可
真正有難度的地方在於操作區間合併,比較難理解。
注意,**中寫的運算子過載只能運用於先進行的操作+後進行的操作
操作區間合併對我這樣的蒟蒻還是挺難理解的
sys orz.
#include#include#include#include#include#define int long long
using namespace std;
const int maxn=5e5+10;
int n,m,q;
int max(int a,int b)
int p[maxn];
struct nodetre[maxn*5];
int k;
node operator + (node x,node y);
if(!x.fm&&!x.l)
if(!y.fm&&!y.l)
if(x.l>y.fm)
else if(k==2)
else if(k==3)
return ;
} int mid=(l+r)>>1;
build(rt*2,l,mid);
build(rt*2+1,mid+1,r);
tre[rt]=tre[rt*2]+tre[rt*2+1];
return ;
}node query(int rt,int l,int r,int ql,int qr);
if(rqr)
if(l>=ql&&r<=qr)
int mid=(l+r)>>1;
if(ql<=mid)
if(qr>mid)
return ans;
}void update(int rt,int l,int r,int pos,int x);
if(x==1)
else if(x==2)
else
return;
}int mid=(l+r)>>1;
if(pos>mid)
else
tre[rt]=tre[rt*2]+tre[rt*2+1];
}signed main()
} return 0;
}
LuoguP5889 跳樹 線段樹
可以將跳左 右 父親抽象成二進位制的形式.跳左 x 1 跳右 x 1 1 父親 x 1 但是題中說如果跳到根節點之後再跳父親編號仍然不變比較不好處理.但是我們發現乙個性質 令 fl 表示乙個區間能跳到最靠上的祖先,path 表示跳到該祖先後向下跳的路徑,答案一定可以表示成 max 1,x fl 考慮...
LuoguP5889 跳樹 線段樹
可以將跳左 右 父親抽象成二進位制的形式.跳左 x 1 跳右 x 1 1 父親 x 1 但是題中說如果跳到根節點之後再跳父親編號仍然不變比較不好處理.但是我們發現乙個性質 令 fl 表示乙個區間能跳到最靠上的祖先,path 表示跳到該祖先後向下跳的路徑,答案一定可以表示成 max 1,x fl 考慮...
洛谷 P2678 跳石頭
原題 這項比賽將在一條筆直的河道中進行,河道中分布著一些巨大岩石。組委會已經選擇好了兩塊岩石作為比賽起點和終點。在起點和終點之間,有 nn 塊岩石 不含起點和終點的岩石 在比賽過程中,選手們將從起點出發,每一步跳向相鄰的岩石,直至到達終點。為了提高比賽難度,組委會計畫移走一些岩石,使得選手們在比賽過...